我有以下内容:
// 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);
但是我不能让'cards'绑定工作 - 除非我删除'create'方法,否则不会达到代码。我试图效仿淘汰赛网站上的例子:
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:Object 没有方法'编辑';绑定值:visible:!$ parent.editing()
答案 0 :(得分:2)
您已覆盖视图模型的create
行为。映射插件不会为您调用属性的任何其他处理程序。由于您是在create
方法中进行映射,因此请移动cards
处理程序。
var mapping = {
create: function(options) {
var innerModel = ko.mapping.fromJS(options.data, {
'cards': {
create: function (options) {
debugger;
return new CardViewModel(options.data);
}
}
});
innerModel.cardCount = ko.computed(function () {
return innerModel.cards().length;
});
return innerModel;
}
};
答案 1 :(得分:-1)
!$parent.editing()
to
!$parent.editing
查看更新的小提琴here