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

时间:2012-03-09 09:37:35

标签: model qooxdoo

我正在尝试制作自己的模型而我不知道如何:

我一直在这里http://demo.qooxdoo.org/current/demobrowser/index.html?qxenv:demobrowser.withTests:true#data~ListControllerWithObjects.html

但我只能看到:

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:

  

“绑定属性”+属性+“对象”+源+“不   可能:没有活动。 “;

找不到活动。

控制台中的错误:

  

未捕获的qx.core.AssertionError:错误

2 个答案:

答案 0 :(得分:4)

使用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”和“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());

看看at my Playground examplethe unit test of the JSON marshaler(搜索“testGetPropertyMapping”)

答案 1 :(得分:1)