2013-06-04 142 views
11

我想實現一個可觀察數組,並在該數組內部應該有可觀察對象(JS對象)。並在視圖中我迭代這個數組並獲取對象並顯示對象屬性。假設有一個像下面這樣的對象,如何在可觀察數組內部敲除可觀察對象

{"name":"john","age":21,"address":"No 25"} 

想象一下,可觀察數組是由上述對象組成的。

然後我想特定對象的改變單一財產(例如名稱),並需要看到的視圖的變化。

我怎樣才能做到這一點使用淘汰賽?

謝謝。

回答

9

如果你在視圖模型中設置你的用戶並且用knockout mapping來映射它,你應該得到想要的結果。例如:

myObservableArray.push(new UserViewModel({"name":"john","age":21,"address":"No 25"})); 

var UserViewModel = function(data){ 
    var self = this; 
    ko.mapping.fromJS(data, {}, self);  
} 

這樣每個映射的屬性都將是可觀察的,當它們改變時,這將反映在您的標記中。

+0

截至目前,答案中引用的插件似乎已被放棄。 –

+0

它仍然適用於最新版本的Knockout(3.4.0) –

2

要將模型轉換爲可觀察視圖模型,可以使用ko.utils.arrayMapko.mapping.fromJS

var source = [{"name":"john","age":21,"address":"No 25"}]; 
var vm = ko.utils.arrayMap(source, function (item) { 
    return ko.mapping.fromJS(item) 
}); 

See fiddle

2

簡單地定義一個新的模式爲您的數據項,使每個屬性可觀察到的,就像這樣:

var dataItemModel = function (name, age, address) { 
    this.name = ko.observable(name); 
    this.age = ko.observable(age); 
    this.address = ko.observable(address); 
} 

當你對他們的數據,循環,創建dataItemModel (它有可觀察的屬性),然後將此項目添加到您的ObservableArray