有没有办法将js对象包装成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>
答案 0 :(得分:1)
ko.mapping.fromJS无论如何都会使你的所有属性都可观察,所以我不确定你为什么要将映射包装在另一个observable中。我已经敲了一个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);
希望这有帮助。