我得到一个对象从一个阵列中在我的模型(一个JSONmodel类型),其是model.getProperty()是否为数组成员的对象返回活动对象?
{
"task": [
{
"dbid": 465,
"bk_cnt": 11,
}, {
"dbid": 472,
"bk_cnt": 16,
}
]
}
我结合这个模型来表并连接bk_cnt长达一个objectNumber中的细胞。到目前为止没有问题。
在代码中,我想在按下按钮时将第一个bk_cnt值的值从11更改为20。我有以下事件:
var model = this.getView().getModel() // get the model
var tasks = model.getProperty("/task"); // get as a JS object
tasks[0].bk_cnt = 20 // update the model...will it update the view?
// model.refresh() // it will if this is uncommented.
问题:虽然它绑定到视图,但bk_cnt的显示值不会改变。如果我添加model.refresh()它。此代码是从较大的部分提取的,其中一个较大的功能是通过列点击进行排序。当我点击一列以重新排序(不改变模型)时,值20出现。
什么给?
冥想:我读过model.getProprty()函数返回一个带有活动引用的javascript对象,返回到该模型,并且该对象的值的更改将自动反映在视图中以进行任何绑定控制。这个陈述落在数组属性上吗?
编辑:我周围发现
model.setProperty("/task/0/bk_cnt", 20)
不需要model.refresh()来更新视图中的问题仍然感觉。这并不令人惊讶,因为这个命令直接通过模型行事。这让我认为getProperty()返回的'live'对象只有在它是一个像字符串或整数这样的基本数据类型时才有效,而不是JS对象。或者我错过了什么?
编辑2:@Ash在他的回答中指出,还有一种方法是从模型属性访问JS对象,设置需要在JS对象中更新的任何属性,然后将其替换为模型,例如
var tasks = model.getProperty("/task");
tasks[0].bk_cnt = 20
model.setProperty('/task', tasks)
完成第二次编辑,完成未来读者的三种方法。
我如何将我的模型绑定到UI对象?在这种情况下,我使用了一个表格,并且在XML视图中将'items'属性设置为'{path:'/ task'}'。还有另一种绑定方式吗? –
除非没有其他参数,否则您可以使用{/ task}并省略路径。当然,你可以通过编程来绑定。 – matbtt
'model.refresh()'将刷新该模型的所有绑定。刷新绑定意味着使用模型中的Javascript对象的当前值更新控件。 'model.setProperty()'当然会改变模型中的Javascript对象,并且更新全部绑定到相同的路径或子路径。出于性能考虑,您必须考虑:如果只有一行数据发生更改,则不必刷新所有行。 – schnoedel