私は次のものを持っています:
// 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);
}
私はこれに過去1日を費やしましたが、これが機能しない理由を一生理解することはできません。どんなヒントも素晴らしいでしょう。
編集:これが私が取り組んでいるもののフィドルです。ここでは「編集」が認識されないため、結果にはSIDE1のみが表示されます。
<div data-bind="visible: !$parent.editing()" class="span5 side-study-box">
これは私がそれを実行したときに私がクロームで得るエラーです:
キャッチされないエラー:バインディングを解析できません。メッセージ:TypeError:オブジェクトにはメソッド'editing'がありません。バインディング値:表示:!$ parent.editing()