Knockout.js 敲除映射如何添加和更新

Knockout.js 敲除映射如何添加和更新,knockout.js,knockout-mapping-plugin,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) 但我也需要在我的虚拟机上提供一

我有一个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)
但我也需要在我的虚拟机上提供一个可观察的“SeleceedMessage”和一个SetSelected函数。但我不确定最好的方式,这些成为我的虚拟机的一部分


有人能解释一下我如何在我的虚拟机上包含这些属性,以及当我用更新的消息列表更新虚拟机时,如何保持这些属性不变吗?

听起来您需要设置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);
});


您可以在使用“创建”自定义对象构造和使用“更新”自定义对象更新部分中阅读更多内容您看过knockoutjs教程了吗?