我目前有以下对象,用于将一些 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/