Knockout映射如何添加和更新

时间:2013-03-07 22:10:31

标签: knockout.js knockout-mapping-plugin

我有一个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函数。但我不确定这些是我的虚拟机的一部分的最佳方式。

有人可以解释我如何在我的虚拟机上包含这些属性,当我用更新的消息列表更新虚拟机时,如何保持这些属性不受影响?

1 个答案:

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

自定义对象更新中阅读更多内容