javascript - knockoutjs 映射插件从对象中删除功能

标签 javascript knockout.js knockout-mapping-plugin

我目前有以下对象,用于将一些 JSON 数据映射到:

function Regions() {
    var self = this;

    self.regions = ko.observableArray([]);

    self.addRegion = function () {
        // add a region
    };

    self.removeRegion = function (region) {
        // remove a region
    };
}

function Region() {
    var self = this;

    self.region = ko.observable("");

    self.products = new Products();
}

function Products() {
    var self = this;

    self.products = ko.observableArray([]);

    self.addProduct = function () {
        // add a product
    };

    self.removeProduct = function (product) {
        // remove a product
    };
}

function Product() {
    var self = this;

    self.name = ko.observable("");
    self.price = ko.observable("");
}

我尝试通过执行以下操作来映射来自服务器的 JSON 响应:

ko.mapping.fromJS(appViewModel, {}, new Regions());

这工作正常,除了产品对象上的函数被映射插件覆盖,而区域对象上的函数仍然存在。

有没有办法做到这一点,以便我可以将我的功能保留在产品对象上?

最佳答案

映射插件在第一级工作正常,因为它使用 new Regions() 作为实例。它不知道为内部区域数组实例化什么实例/函数。

它创建的条目具有相同的名称,但不是 Product() 函数的实例 - 映射不知道它,因此对象只是可观察属性的集合。这有道理吗?

查看映射文档中使用“create”自定义对象构造部分。您需要告诉插件如何以这种方式构造子对象。

关于javascript - knockoutjs 映射插件从对象中删除功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28236834/

相关文章:

javascript - 如何绑定(bind) div 宽度/高度以形成字段?

javascript - Knockout.js 双向绑定(bind) : Number Formatted as String

javascript - 我是否总是使用 Knockout 映射插件来制作我的 View 模型,从而过度使用它?

javascript - 如何确定用户是否关闭了 google auth2.signIn() 窗口?

javascript - 单击事件不正确地更改同一类型的所有 React 组件

javascript - Javascript正则表达式按顺序替换数字

javascript - 如何从 npm install 中包含样式表和 javascript

javascript - Knockout JS,如何将$符号添加到observable

knockout.js - 尝试在 TypeScript 中导入 i18next 时无法加载外部模块

javascript - 为什么 Knockout.js 数据绑定(bind)到 checkValue 会覆盖 observable?