2014-09-20 65 views
0

在我的ViewModel我绑定了用户属性来userDataSource.at(0):无法更新dataSource.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是一个指向userDs中元素的指针。

回答

1

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

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

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

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

我还是不完全明白为什么这使得如此巨大的差异,但至少我知道如何解决它。