0

在我的 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 的第一个元素没有改变。似乎 user 不是指向 userDs 中第一个元素的指针,而是第一个元素的副本。

如果我这样做,它会起作用:

vm.userDs.at(0).set('DisplayName','John Doe');
vm.userDs.sync();

但这是一个非常丑陋的解决方法。我希望 vm.user 成为指向 userDs 中元素的指针。

4

1 回答 1

1

原来这不起作用的原因是因为我在定义后更改了 dataSource 的过滤器。

userDataSource = {
   ...
}
userDataSource.filter({/*filter config*/});

在 userDataSource 定义中移动过滤器解决了这个问题:

userDataSource = {
   ...
   filter: {/*filter config*/}
}

我仍然不完全理解为什么这会产生如此巨大的差异,但至少我知道如何解决它。

于 2014-09-26T08:59:14.363 回答