【问题标题】:Knockout mapping how to add and updateKnockout mapping如何添加和更新
【发布时间】:2013-02-23 08:00:23
【问题描述】:

我有一个如下所示的 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)

但我还需要在我的 vm 上观察到“SelectedMessage”和 SetSelected 函数。但我不确定这些成为我的虚拟机一部分的最佳方式。

谁能解释我如何在我的虚拟机中包含这些属性,当我使用更新的消息列表更新虚拟机时,如何保持这些属性不变?

【问题讨论】:

标签: knockout.js knockout-mapping-plugin


【解决方案1】:

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


您可以在使用“create”自定义对象构造和使用“update”自定义对象更新部分阅读更多内容here

【讨论】:

    猜你喜欢
    • 2014-05-01
    • 1970-01-01
    • 2013-08-15
    • 2019-01-19
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    相关资源
    最近更新 更多