如何用viewmodel替换整个对象(使用映射插件创建)(使用映射插件创建)?请注意我在视图模型中的评论...
function viewmodel(objServerModel) {
var self = this;
self.profile = objServerModel; //Using ko.observable(objServerModel) doesn't seem to work. I need to replace this object every time I load new content from the server and it should automatically update all controls bound to it. Note that this is the object that is created using ko.mapping.fromJS
self.devices = ko.observableArray(['one', 'two']);
});
以下功能仅调用一次。从下一次开始,每当我从服务器检索新数据时,我都需要替换self.profile。 如果我使用self.profile = ko.observable(objServerModel),它不起作用。每当我从服务器异步加载新数据时,如何替换viewmodel中的配置文件对象?
function ApplyKnockOut() {
var objServerModel = '@Html.Raw(HttpUtility.JavaScriptStringEncode(clsTest.ReadXmlIntoModel()))'
var objResult = $.parseJSON(objServerModel);
var objModelFromServer = ko.mapping.fromJS(objResult);
var clientViewModel = new viewmodel(objModelFromServer);
ko.applyBindings(clientViewModel);
return clientViewModel;
}
我将不胜感激。
由于
编辑:替换的映射模型结构将是相同的。只有价值会有所不同。
这是我的jsfiddle:http://jsfiddle.net/rzFgU/
答案 0 :(得分:1)
Ko映射的设计方式与此类似,因为它不希望完全呈现视图,而只是更新已更改的绑定。如果您确实希望将其更改为新的对象引用,则可以执行此类操作。请注意,保持对象的成员是一个可观察对象很重要,因为我们现在更改对象引用而不是更新同一对象上的observable。
ViewModel = function(data) {
this.complex = ko.observable(); //Important
this.map(data);
};
ViewModel.prototype = {
map: function(data) {
var mapping = {
complex: {
update: function(options) {
return ko.mapping.fromJS(options.data);
}
}
};
ko.mapping.fromJS(data, mapping, this);
}
};
编辑:您的小提琴有一些问题来自以下评论jsfiddle.net/rzFgU
我会在这里列出