0

ビューにカードを追加するとき、私はこれを呼び出します:

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で実行しましたが、「呼び出しスタックサイズを超えたエラー」が発生します。今それを掘り下げる...

4

1 に答える 1

2

self = result結果に変数selfを再割り当てします。オブジェクトがそれ自体またはそのプロパティを更新することはありません。selfJS割り当ての動作を変更する特別なことは何もありません。

ko.mapping.fromJS(result, {}, this)オブジェクトを更新するには、を呼び出すだけです。

于 2013-03-26T19:40:12.467 に答える