我有以下内容:
// Child Array is Cards, trying to add computed observable for each child
var CardViewModel = function (data) {
ko.mapping.fromJS(data, {}, this);
this.editing = ko.observable(false);
};
var mapping = {
'cards': { // This never gets hit, UNLESS I remove the 'create' method below
create: function (options) {
debugger;
return new CardViewModel(options.data);
}
},
create: function(options) {
var innerModel = ko.mapping.fromJS(options.data);
innerModel.cardCount = ko.computed(function () {
return innerModel.cards().length;
});
return innerModel;
}
};
var SetViewModel = ko.mapping.fromJS(setData, mapping);
debugger;
ko.applyBindings(SetViewModel);
但是,我无法使“卡片”绑定起作用-除非我删除“创建”方法,否则无法到达该代码。我正在尝试按照淘汰赛网站上的示例进行操作:
http://knockoutjs.com/documentation/plugins-mapping.html
他们为子对象定义这样做:
var mapping = {
'children': {
create: function(options) {
return new myChildModel(options.data);
}
}
}
var viewModel = ko.mapping.fromJS(data, mapping);
ChildModel 定义如下:
var myChildModel = function(data) {
ko.mapping.fromJS(data, {}, this);
this.nameLength = ko.computed(function() {
return this.name().length;
}, this);
}
我在过去的一天里一直在做这件事,我一生都无法弄清楚为什么这不起作用。任何提示都会很棒。
编辑:这是我正在使用的小提琴。它仅在结果中显示 SIDE 1,因为此处无法识别“编辑”:
<div data-bind="visible: !$parent.editing()" class="span5 side-study-box">
这是我在运行 chrome 时遇到的错误:
未捕获的错误:无法解析绑定。消息:TypeError:对象没有方法“编辑”;绑定值:可见:!$parent.editing()