SAPUI5 - 从Ajax响应创建JSONModel

时间:2014-09-16 16:00:54

标签: sapui5

我正在尝试使用JSON模型构建SAPUI5应用程序。 我想添加2个下拉选择菜单,以便根据第一个选项的当前选择填充第二个菜单。 我试图完成它,但一开始就坚持了下来。

这是我从Ajax获得的(对象本身是从服务器传递的):

var data = {
    "firm1":["firm1project1","firm1project2","firm1project3"],
    "firm2":["firm2project1","firm2project2","firm2project3"],
    "firm3":["firm3project1","firm3project2","firm3project3"],
    "firm4":["firm4project1","firm4project2","firm4project3"]
        };
var oModel = new sap.ui.model.json.JSONModel();
oModel.setData(data);
sap.ui.getCore().setModel(oModel);

第一个菜单应该是公司列表,第二个菜单应该是选定公司的项目。现在我不知道如何以正确的方式将数据绑定到控件。

谢谢。

编辑:

根据我读过的in the developer's guide,应该出现在不同控件中的数据包含在固定密钥下(如"简单应用程序中的聚合数据绑定"部分所示)我上面链接的页面,所以可以写出类似的东西:

var oListItemTemplate = new sap.ui.commons.ListItem("ListItemTemplate", {
    text : "{firm}",
});

和项目:

var oListItemTemplate = new sap.ui.commons.ListItem("ListItemTemplate", {
    text : "{firm/project}",
});

但在我的情况下,没有firm键。公司选择菜单的ListItems是键,而不是值。项目选择菜单中的ListItems位于数组中,而不仅仅是固定键下的单独值。

那么,有没有办法或以某种方式将我当前形式的数据绑定到控件,或者数据应该如何对绑定有用?

1 个答案:

答案 0 :(得分:1)

您的数据看起来更像下面这样,数据绑定JSON对象带有键。并且两个下拉框需要两个数据模型,应该使用multi data model绑定。我在JSBin做了一个满足你要求的例子,你可以看看并得到一些想法。

{
    "firms": [
    {
        "name": "firm1",
        "projects": [
        {
            "name": "firm1project1"
        },
        {
            "name": "firm1project2"
        },
        {
            "name": "firm1project3"
        }
        ]
    },
    {
        "name": "firm2",
        "projects": [
        {
            "name": "firm2project1"
        },
        {
            "name": "firm2project2"
        },
        {
            "name": "firm2project3"
        }
        ]
    },
    {
        "name": "firm3",
        "projects": [
        {
            "name": "firm3project1"
        },
        {
            "name": "firm3project2"
        },
        {
            "name": "firm3project3"
        }
        ]
    },
    {
        "name": "firm4",
        "projects": [
        {
            "name": "firm4project1"
        },
        {
            "name": "firm4project2"
        },
        {
            "name": "firm4project3"
        }
        ]
    }
    ]
}