2011-10-06 25 views
1

有沒有辦法將js對象包裝成observable()?包裝一個ko.mapping.fromJS()作爲ko.observable()

//initialization 
var CompositeModel = { 
propertyOne: null, 
propertyTwo: null 
}; 
myClass.myContent = **ko.observable(ko.mapping.fromJS(CompositeModel))**; 


//everytime I get an update I call 
ko.mapping.fromJS(newCompositeModel, myClass.myContent); 

但似乎如果我做,如果我的看法結合是這樣這樣我的觀點並沒有得到任何東西:

<h1 data-bind="text: myContent.propertyOne"></h1> 

回答

1

的ko.mapping.fromJS使無論如何你所有的屬性都可以觀察,所以我不確定你爲什麼想把這個映射包裝在另一個可觀察對象中。我敲了一個jsFiddle來演示將javascript對象映射到視圖模型中,然後在稍後更新該映射。

http://jsfiddle.net/unklefolk/ztNtc/4/

<p data-bind="text: propertyOne"></p> 
<p data-bind="text: propertyTwo"></p> 
<input type="button" value="Update model" data-bind="click: updateMe"/> 

var CompositeModel = { 
propertyOne: 'hi', 
propertyTwo: 'there' 
}; 

var newCompositeModel = { 
propertyOne: 'how are', 
propertyTwo: 'you?' 
}; 

var viewModel = ko.mapping.fromJS(CompositeModel); 

viewModel.updateMe = function() {ko.mapping.fromJS(newCompositeModel, viewModel)} 
ko.applyBindings(viewModel); 

希望這有助於。

+0

我懷疑@ user964228的問題與我正在運行的問題相同 - 他正在更新位於其viewModel對象字段中的模型,並且綁定在這些字段上的元素數據不是肚子就是該字段不會在它發生之前不存在,或者如果您使用字段加載對象,則在數據更新時不會看到更改。 –