我有一个js对象,如下所示
{Messages: [
{Content: "some content",
Id: "203",
IsNew: false,
Subject: "some Subject"},
....
]}
我希望'IsNew'至少能够被观察到。为此,我使用了ko.mapping插件
//Within success of ajax call
var vm = ko.mapping.fromJS(data)
但我也需要在我的虚拟机上使用'SelecetedMessage'可观察和SetSelected函数。但我不确定这些是我的虚拟机的一部分的最佳方式。
有人可以解释我如何在我的虚拟机上包含这些属性,当我用更新的消息列表更新虚拟机时,如何保持这些属性不受影响?
答案 0 :(得分:2)
听起来你需要设置一个viewModel映射来为你的消息添加扩展属性。看起来应该是这样的:
var Message = function(data) {
var self = this;
ko.mapping.fromJS(data, { }, self);
self.isNew = ko.observable(false);
// Add more message-specific observables or functions you need here
};
var viewModelMapping = {
'Messages': {
create: function(options) {
return new Message(options.data);
}
};
var ViewModel = function(data) {
var self = this;
// Add more view model-specific observables or functions you need here
ko.mapping.fromJS(data,viewModelMapping,self);
}
$(document).ready(function () {
vm = new ViewModel(initialViewModelData);
ko.applyBindings(vm);
});
您可以在使用“创建”自定义对象构建和使用“更新”部分here