UI5:获取模型中新对象的路径

时间:2018-03-16 10:07:32

标签: sapui5

我经常遇到某种主从细节情况,我尝试在主视图和详细视图中使用单个模型。

当您在列表中选择项目时,详细信息页面将直接绑定到列表中包含 out/ - appname-forge-win32-x64/ - - locales/ - - resources/ - - - app/ - - - electron.asar 的元素。路径可从绑定上下文中获得。每个人都很高兴:

.bindElement(path)

挑战在于列表页面有“添加”按钮。我创建了一个新对象并将其放入模型中。但是我如何找到路径呢?我没有上下文:

//click handler for list item:
var context = this.getBindingContext();
oDetailPage.bindElement(context.getPath());
oApp.toDetail(oDetailPage);

我搜索了//click handler for "add" button var newStuff = { propA: "foo", propB: 13 }; oModel.setData(oModel.getData().concat(newStuff)); oDetailPage.bindElement(/* What??? */); oApp.toDetail(oDetailPage); 方法但没有这样的东西

2 个答案:

答案 0 :(得分:2)

嗨,不幸的是我无法测试这个,但我认为这应该有用

绑定路径几乎是指向集合中特定条目的指针。路径值取决于几个变量,例如模型的结构。

例如,如果Model数据如下所示:

{"results" : [
            {propA: "foo",
             propB: 13
            },
            {propA: "ber",
             propB: 14
            }]

}

你结束了

{propA: "newItem",
 propB: 15
}

我相信你的绑定路径是

"/results/2"

您还可以使用类似

的内容查找最新的索引
this.getModel("yourModel").getObject("results").length;

编辑 - 除非我不理解您的问题,否则您的新条目应该在模型的最后。

答案 1 :(得分:1)

这里有2个案例

//click handler for "add" button
var newStuff = {
  propA: "foo",
  propB: 13
};

// case 1: root of model data is an array
var oData = oModel.getProperty("/");
oData.push(newStuff);
oDetailPage.bindElement("/" + oData.length - 1);

// case 2: we appends to /results
var oData = oModel.getProperty("/results");
oData.push(newStuff);
oDetailPage.bindElement("/results/" + oData.length - 1);