ビューにカードを追加するとき、私はこれを呼び出します:
innerModel.addCard = function() {
// This just adds a card to the UI
var card = new cardViewModel(addCardDto);
innerModel.cards.push(card);
}.bind(this);
これにより、UIに空のカードが追加され、ユーザーはいくつかの情報を入力できるようになります。彼らが「保存」をクリックすると、私はこの最低限のパッケージをネットワーク経由で送信し、サーバーサイドに保存してから、より完全なオブジェクトを返します。更新についても同じことが言えます。必要なものだけを送信し、完全なオブジェクトを取得します。これが私のcardViewModelです:
var cardViewModel = function(data) {
var self = this;
ko.mapping.fromJS(data, {}, this);
self.isNew = ko.observable(false);
// If the card hasn't been created yet, it won't have a cardId
if (typeof this.cardId === 'undefined') {
this.isNew(true);
}
this.save = function() {
// Implement API call here, one for POST, one for PUT. For now:
// Currently just using a hard-coded piece of data 'cardDto' that mocks the result of an API call
var result = new cardViewModel(cardDto); // Problem is somewhere around here
result.editing(false);
result.isNew(false);
debugger;
// trying to re-assign the object to the result here, but it's not working. No errors from javascript, just no activity when I click "save".
self = result;
};
};
私の見解から私は持っています:
<a data-bind="click: save">save</a>
私のsaveメソッドがこれだけだったとき、これは以前は機能していました:
this.save = function() {
// Implement API call here, one for POST, one for PUT. For now:
this.editing(false);
this.isNew(false);
};
私は何が間違っているのですか?
私はこれを試しました:
this.save = function() {
// Implement API call here, one for POST, one for PUT. For now:
// Currently just using a hard-coded piece of data 'cardDto' that mocks the result of an API call
var result = new cardViewModel(cardDto); // Problem is somewhere around here
result.editing(false);
result.isNew(false);
debugger;
// trying to re-assign the object to the result here, but it's not working. No errors from javascript, just no activity when I click "save".
ko.mapping.fromJS(result, {}, self); // NEW
};
しかし、これを実行すると、クロムはエラーなどなしで死にます。「Awsnap」とだけ表示されます。
編集:IEで実行しましたが、「呼び出しスタックサイズを超えたエラー」が発生します。今それを掘り下げる...