2

app.js の require define にロードする backbone-extend.js ファイルがあります。いくつかのヘルパー メソッドを定義する Backbone.View 拡張クラスがあります。メソッドのうちの 2 つは私の見解では問題なく動作しますが、1 つは常にUncaught TypeError: Object [object global] has no method 'gotoUrl'. この 1 つのメソッドだけが定義されていないのに、他の 2 つのメソッドは正常に機能しているのはなぜでしょうか? このコードに問題はありますか...

// Filename: backbone-extend.js

define([
    'jquery',
    'underscore',
    'backbone'
], function($, _, Backbone) {

    var helpers = {
        eventSyncError: function(model,response,options) {
            console.log('Sync error='+response.statusText);
            $('#server-message').css({'color':'red', 'font-weight':'bold'}).text(response.statusText);
        },

        gotoUrl: function(url,delay) {
            var to = setTimeout(function() { Backbone.history.navigate(url, true); }, delay);
        },

        getFormData: function(form) { 
            var unindexed_array = form.serializeArray();
            var indexed_array = {};

            $.map(unindexed_array, function(n, i) {
                indexed_array[n['name']] = n['value'];
            });

            return indexed_array;
        }
    }

    _.extend(Backbone.View.prototype, helpers);

});

それを呼び出すビューのコードは次のとおりです...

    eventSyncMemberSaved: function(model,response,options) {
        console.log("Member saved!");
        $('#server-message').css({'color':'green', 'font-weight':'bold'}).text("Member saved!");
        this.gotoUrl('members',2000);
        //setTimeout(function() { Backbone.history.navigate('members', true); }, 2000);
    },

    saveMember: function() {
        var data = this.getFormData($('#member-form'));
        this.member.save(data, { success: this.eventSyncMemberSaved });
    },

よろしくお願いします。私は立ち往生しています。

4

1 に答える 1

0

のコンテキストはthissuccess callback.

オブジェクトを指しているため、ビューを指していませんxhr

xhrそのメソッドはオブジェクトで使用できないため、エラーがスローされます

これを解決するには、 this を成功ハンドラーにバインドしcontextて、正しいオブジェクトを指すようにする必要があります。

したがって、ビューの初期化でこのコードを追加します

initialize: function() {

    _.bindAll(this, 'eventSyncMemberSaved');
}
于 2013-08-02T20:07:04.593 に答える