使用映射插件在 KnockoutJS 中扩展视图模型

Extending a view model in KnockoutJS with mapping plugin

本文关键字:扩展 视图 模型 KnockoutJS 映射 插件      更新时间:2023-09-26

我有一个来自服务器的视图模型,像这样作为json。

{
    Project: {
        Items: {
            ItemA: {
                Tags: [
                    ...
                ]
            },
            ItemB: ...
        }
    }
}

然后我将此对象与 knockout.mapping 插件绑定,但我需要 ItemA 具有,例如,一个额外的标记可观察量,这样我在标记中可以做类似的事情

<ul data-bind="foreach: Project.Items">
    ...            
    <input type="checkbox" data-bind="checked: Marked">

我尝试在映射过程中使用 create 选项(如此处所示 ko.mapping create function, extend object),但我无法弄清楚如何嵌套 create 方法来扩展 Project.Items 中的对象。

我一直在尝试这样的映射

var mappings = {
    'Items': {
        create: function (options) {
            return $.map(options.data, function(obj) {
                return new Item(obj);
            });
        }
    }
}

解决方案是这种绑定

var mappings = {
    'Items': {
        create: function (options) {
            return new Item(options.data);
        }
    }
};