如何在Qooxdoo中创建自定义模型?(用于列表)

How to create a custom Model in Qooxdoo? (for a list)

本文关键字:用于 列表 模型 自定义 Qooxdoo 创建      更新时间:2023-09-26

我正在尝试制作自己的模型,但我不知道如何制作。

我一直在看ListControllerWithObjects演示,但我只能看到:

var person = new demobrowser.demo.data.model.Person(); 

但不要显示它是从哪里来的或者是如何制作的。所以本教程没有用处。

为什么我想要一个自定义模型?我想有一个自定义类,只为模型,知道结构,并把自定义方法放在其中

我有:[{a: 2, b: 4}, {a: 1, b: 9}];

我想把它放在一个列表上,但使用这个

var model = this._model = new qx.data.Array([{id: 1, name: "Victor"}]);    
this._listController = new qx.data.controller.List(model, this._list, 'name');

不起作用。真正的错误是SingleValueBinding:

"绑定属性"+propertyname+";对象"+"的源+";不可能:没有可用的活动";

它找不到事件。

控制台中的错误:

未捕获qx.core.AssertionError:错误

使用qx.data.marshal.Json.createModel

->你的代码应该是这样的:

var model = this._model = qx.data.marshal.Json.createModel([{id: 1, name: "Victor"}]);    
this._listController = new qx.data.controller.List(model, this._list, 'name');

->将两个模型元素映射到同一属性("a"answers"secondA"):

var data = [{a: 2, b: 4}, {secondA: 1, b: 9}];
var delegate = {
    getPropertyMapping : function(property, properties) {
        if (property === "secondA") {
            return "a";
        }
        return property;
    }
};
var marshaler = new qx.data.marshal.Json(delegate);
marshaler.toClass(data);
var model = marshaler.toModel(data);
this.assertEquals("2", model.toArray()[0].getA());
this.assertEquals("1", model.toArray()[1].getA());

看看我的Playground示例或JSON封送拆收器的单元测试(搜索"testGetPropertyMapping")

第一个问题的答案在这里:

https://github.com/qooxdoo/qxl.demobrowser/blob/master/source/class/qxl/demobrowser/demo/data/model/Person.js

此文件包含缺少的Person类的定义