knockoutjs mapping plugin从对象中删除函数

时间:2015-01-30 13:18:40

标签: 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());

这样可以正常工作,除了Products对象上的函数被映射插件覆盖,而Regions对象上的函数仍然存在。

有没有办法这样做,以便我可以将我的功能保留在Products对象上?

1 个答案:

答案 0 :(得分:0)

映射插件适用于第一级,因为它使用new Regions()作为实例。它不知道内部区域数组的实例/函数实例化。

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

在映射文档中查看使用“create”定制对象构造部分。你需要告诉我们如何以这种方式构造子对象。