0

これが私の問題です。

私は Backbone js を使用しており、定義したすべてのコレクションは、保存または破棄時に同じチェックを必要とします。ただし、破棄成功関数には、破棄が成功したときにページから削除する要素を渡す必要があります。

すべての保存または破棄メソッドに同じコードをコピーして貼り付けたくなかったので、これを作成しました。

window.SAVE_TYPE_DESTROY = 'destroy';

window.SaveResponseHandler = function(el,type){
    if (!type){
        this.success = function() {
            this._success();
        };
    }else if (type == window.SAVE_TYPE_DESTROY){
        this.success = function() {
            this._success();
            $(el).remove();
        };
    }

};
SaveResponseHandler.prototype._success = function(model, response, options) {
                if ((response.success * 1) === 0) {
                    persistError(model, {
                        responseText: response.message
                    }, {});
                }
            };
SaveResponseHandler.prototype.error = persistError;

var saveResponseHandler = new SaveResponseHandler();

そして、私はそれを次のように使用します:

 destroy: function() {
        var el = this.el;
        var model = this.model;
        this.model.destroy(new SaveResponseHandler(el,'destroy'));
    },
    change: function() {
        this.model.set({
            job_category_name: $($(this.el).find('input')[0]).val()
        });
        var viewView = this.viewView;
        this.model.save(null, saveResponseHandler);
    }

問題は、成功が呼び出されたときに次のエラーが発生することです。

キャッチされていない TypeError: オブジェクト [オブジェクト ウィンドウ] にメソッド '_success' がありません

どんな助けでも大歓迎です。また、これを処理するためのより良い方法についての提案もお待ちしています。

4

1 に答える 1

1

thisSaveResponseHandler.successはそうではありませんSaveResponseHandler、それはwindowです。

window.SaveResponseHandler = function(el, type) {
    var self = this;

    if (!type) {
        this.success = function() {
            self._success();
        };
    } else if (type == window.SAVE_TYPE_DESTROY) {
        this.success = function() {
            self._success();
            $(el).remove();
        };
    }
};

http://jsfiddle.net/ethagnawl/VmM5z/

于 2013-03-20T01:24:22.467 に答える