SetData和LoadData一起用于JSONModel

时间:2016-10-24 11:43:13

标签: model-view-controller sap sapui5

我的 SAP UI5 应用程序控制器中有以下编码:

var myView = this.getView();

var data1 = {
        "myDate": new Date()
        };

oModel.loadData("products.json");

oModel.setData(data1);
myView.setModel(oModel);

其中 products.json - 只是屏幕上表格的简单数据。

我只能在屏幕上看到 products.json 数据,而oModel中的 myDate 值为空(在调试中检查)。

如果我评论 loadData 字符串, myDate 值会出现在屏幕上,看起来不错。

我如何一起使用它们?这种情况的最佳做法是什么?

3 个答案:

答案 0 :(得分:0)

模型loadData是一个异步过程,因此在与data1同步设置后,它会更新模型。 此外,setData()将清除模型中已有的所有内容,因此最好使用setProperty并仅更新模型中的特定节点。

一旦从文件中加载静态数据,就应该添加静态数据:

oModel.attachRequestCompleted(function() {
    oModel.setProperty("/myExtraData", data1);
});

然后可以通过/myExtraData/myData

获取您添加的日期

答案 1 :(得分:0)

将新数据与SELECT e.FirstName, e.LastName, COUNT(*) as total, SUM(CASE WHEN m.isRead = 0 THEN 1 ELSE 0 END) as total_unread FROM [Messages] m JOIN Employees e ON m.SenderId = e.UserId GROUP BY e.EmployeeId, e.FirstName, e.LastName; 参数setData()的现有数据合并。

oModel.loadData("products.json");
var data1 = {
    "myDate": new Date()
};
oModel.attachRequestCompleted(function() {
   oModel.setData(data1, true);
});

答案 2 :(得分:0)

API loadData还有一个bMerge选项。

oModel.setData({ myDate: new Date() });
oModel.loadData("products.json", null, true, "GET", /*bMerge*/true);
// Merged results:
{
  myDate: /*date object*/,
  produces: [/*...*/]
}

无需为requestCompleted注册事件处理程序。