将ko.mapping.fromJS()包装为ko.observable()

时间:2011-10-06 21:13:07

标签: knockout.js

有没有办法将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>

1 个答案:

答案 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);

希望这有帮助。