SAPUI5 - 复杂的模型绑定

时间:2013-12-04 16:21:59

标签: binding model sapui5

我有这个json模型:

模型/ data.json

{
    "orders" : [
        {
            "header" : { "id" : "00001", "description" : "This is the first order" },
            "items" : [
                { "name" : "Red Book","id" : "XXYYZZ" },
                { "name" : "Yellow Book", "id" : "AACCXX" },
                { "name" : "Black Book", "id" : "UUEEAA" },
            ]
        },
        {
            // another order with header + items
        },

        .....
    ]
}

我正在为视图分配onInit,如下所示:

var model = new sap.ui.model.json.JSONModel("model/data.json");
sap.ui.getCore().setModel(reqModel);

我正在尝试在第一个视图中显示订单列表(显示ID),如下所示:

var list = new sap.m.List({
    id: "mainList",
    items: []
});

var items = new sap.m.ActionListItem({
    text : "{id}",
    press : [ //click handler, onclick load the order details page ]
});

list.bindItems("/orders", items);

.... // add list to the page etc etc

我不能做的是将每个订单连接到 header-> id ..我试过了

text: "/header/{id}"

text: "{/header/id}"
项目声明中的

list.bindItems("/orders/header", items)
列表绑定中的

,但它们都不起作用..即使显示“空白”列表项,也不会显示 id 值。

有什么想法吗?我做错了什么?

谢谢

3 个答案:

答案 0 :(得分:3)

解决方案是我试过的解决方案之一(但我不知道为什么它当时没有工作)

text: "{/header/id}"

答案 1 :(得分:2)

ListItem充当对象列表/数组的模板。这就是你将它绑定到数据中的数组结构的原因:

list.bindItems("/orders", itemTemplate)

这使得ListItem的绑定相对于/orders,因此您的项目看起来应该没有前导'/'(绝对路径看起来像/orders/0/header/id asf。):

var itemTemplate = new sap.m.ActionListItem({
    text : "{header/id}",
    press : [ //click handler, onclick load the order details page ]
});

不太确定你是如何使它按照你所展示的方式工作的......可能不像我想的那么挑剔。

Btw:无论出于何种原因,ResourceModel构建了该语法的异常。在处理ResourceModels时,您总是可以省略前导'/'(可能是因为它们不允许嵌套结构)。

BR 克里斯

答案 2 :(得分:1)

无法添加评论,因此您的答案解决了问题,可以解答最初的问题。 (并以任何方式通知人们使用该示例)

在当前代码清单中,您使用变量“reqModel”来设置模型,但其中带有模型的变量在之前的行中被命名为“model”。也许这就是为什么你的两个考试都不起作用的第一个原因?

在测试时重写某些段落时可能会清除此错误。

问候! -nx