如何在使用sap.ui.model.json.JSONModel向数组添加元素时强制进行绑定更新
How to force a binding update when adding a Element to a Array using sap.ui.model.json.JSONModel
我定义了一个sap.ui.model.json.JSONModel
,如下所示:
var viewModel = new sap.ui.model.json.JSONModel({
items: [
{ name: 'item 1'},
{ name: 'item 2'},
{ name: 'item 3'}
]
});
this.getView().setModel(viewModel, 'viewModel');
现在,我想向items
数组添加一个新元素,并强制更新所有绑定。做到这一点的最佳方法/最佳实践是什么?现在我是这样做的:
var model = new sap.ui.model.json.JSONModel({ name: null });
var form = new sap.ui.layout.form.SimpleForm({
// ... some code here with binding to `model` ...
});
form.setModel(model);
// ... some code here to trigger the code below ...
var viewModel = this.getModel('viewModel');
var items = viewModel.getProperty('/items');
items.push(model.getData());
viewModel.setProperty('/items', items);
但这看起来有点不对。有更好的方法更新viewModel吗?
您的使用方式是我也使用的两种方式之一,另一种是直接更改模型中的数据并调用刷新来更新绑定
var model = new sap.ui.model.json.JSONModel([]);
model.getData().push({aKey: "aValue"});
model.refresh();
在您的示例中添加一个项目将是
var model = this.getView();
model.getData().items.push({name: "someName"});
model.refresh();
好吧,我想我找到了一个更好的解决方案。首先,我这样扩展了JSONModel:
sap.ui.define([
'sap/ui/model/json/JSONModel'
], function(JSONModel) {
'use strict';
return JSONModel.extend('app.model.JSONModelWithListProperty', {
appendToList: function(property, itemToAppend) {
var arr = this.getProperty(property);
if ($.isArray(arr)) {
arr.push(itemToAppend);
}
this.setProperty(property, arr);
return this;
}
});
});
实例化现在看起来是这样的:
var viewModel = new app.model.JSONModelWithListProperty({
items: [
{ name: 'item 1'},
{ name: 'item 2'},
{ name: 'item 3'}
]
});
this.getView().setModel(viewModel, 'viewModel');
因此,我可以通过简单地调用来更新列表
this.getModel('viewModel').appendToList('/items', model.getData());
对我来说看起来更好一点,并为我节省了一些代码行。我愿意接受任何建议。
相关文章:
- 如何将html元素添加到tampermonkey中
- 如何将html元素添加为生成的内容
- 如何向Selectize元素添加渲染和创建方法
- 向html选择元素添加选项
- 在d3中向DOM元素添加了图像,但现在它赢得了't过渡
- 如何将新的键/值对元素添加到现有数组
- 使用docment.createElement向元素添加选项
- ng重复向一个元素添加条件类
- 为li元素添加标题
- 向ckeditor中的多个元素添加内联样式
- Javascript 向影子根中的自定义元素添加函数
- 将伪元素添加到<文本区域>
- 如果类只包含一个特定数字,则向元素添加类
- DOM:将空元素添加到 DOM 和页面重排
- 是否有 jQuery 事件用于何时将元素添加到文档中
- 通过 ajax 使用自定义滚动条向元素添加内容
- 是否可以用D3将svg元素添加到开放层映射中
- 如何将元素添加到动态数组并排除现有元素
- 在AngularJS中将元素添加到作用域时,如何在所有设备上播放声音
- 将图像元素添加到<a>标签