在我的viewModel中,我将用户属性绑定到userDataSource.at(0):
vm.set('userDs',userDataSource);
userDataSource.fetch(function(){
vm.set('user', userDataSource.at(0));
});
只要我只使用用户数据,这就可以很好地工作。但当我尝试更新数据时,它不起作用。
vm.user.set('DisplayName','John Doe');
vm.userDs.sync();
这是行不通的。问题是,vm.user现在已经更新,但vm.userDs的第一个元素没有更改。用户似乎不是指向userDs中第一个元素的指针,而是第一个元素副本。
如果我这样做,它会起作用:
vm.userDs.at(0).set('DisplayName','John Doe');
vm.userDs.sync();
但这是一个非常丑陋的变通方法。我希望vm.user是指向userD中元素的指针。
原来这不起作用的原因是我在定义数据源后更改了它的过滤器。
userDataSource = {
...
}
userDataSource.filter({/*filter config*/});
在userDataSource定义中移动过滤器解决了问题:
userDataSource = {
...
filter: {/*filter config*/}
}
我仍然不完全理解为什么这会产生如此巨大的差异,但至少我知道如何解决它