Javascript &引用;创建;用于嵌套对象的KO映射选项在“主”时未使用;创建;指定
我有以下资料:Javascript &引用;创建;用于嵌套对象的KO映射选项在“主”时未使用;创建;指定,javascript,knockout.js,knockout-mapping-plugin,Javascript,Knockout.js,Knockout Mapping Plugin,我有以下资料: var CardViewModel = function (data) { ko.mapping.fromJS(data, {}, this); this.editing = ko.observable(false); this.edit = function() { debugger; this.editing(true); }; }; var mapping = { 'cards': {
var CardViewModel = function (data) {
ko.mapping.fromJS(data, {}, this);
this.editing = ko.observable(false);
this.edit = function() {
debugger;
this.editing(true);
};
};
var mapping = {
'cards': {
create: function (options) {
debugger; // Doesn't ever reach this point unless I comment out the create method below
return new CardViewModel(options.data);
}
},
create: function(options) {
//customize at the root level.
var innerModel = ko.mapping.fromJS(options.data);
//debugger;
innerModel.cardCount = ko.computed(function () {
//debugger;
return innerModel.cards().length;
});
return innerModel;
}
};
var SetViewModel = ko.mapping.fromJS(setData, mapping);
debugger;
ko.applyBindings(SetViewModel);
当我运行此命令时,“cards”方法从未被命中,因此CardViewModel中的那些编辑属性不可用。如果注释掉“create”方法,我可以点击调试器,但我需要两者。知道发生了什么吗
'cards'
不是有效的Javascript变量名。尝试其他没有单引号的东西
您还需要编辑您的CardViewModel
代码,因为内部函数中的此
指的是内部函数,而不会在外部函数中看到可观察到的敲除
var CardViewModel = function (data) {
var self = this;
ko.mapping.fromJS(data, {}, this);
this.editing = ko.observable(false);
this.edit = function() {
debugger;
self.editing(true);
};
};
谢谢你,戴夫。我对“cards”有点困惑——我在下面的例子中定义了“children”子数组:在我的例子中,“cards”是一个数组。当我删除“create”方法时,这个方法确实被击中了。杰克,这个回答了你原来的答案吗?我现在也处在一个类似的位置,删除单引号没有什么区别。除非删除主创建项,否则我永远不能对子对象使用创建项。我不明白为什么会接受此项。这显然是@JakeP指出的击倒语法的一部分。此外,在修改后的CaredViewModel中,没有任何地方引用映射。