2014-09-20 83 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*/} 
} 

我還是不完全明白爲什麼這使得如此巨大的差異,但至少我知道如何解決它。