0

ApplicationViewルーター上のすべてのイベントをリッスンしたい。私がすればそれは動作します:

this.model.router.on('route:myroute1, 'update');
this.model.router.on('route:myroute2, 'update');
this.model.router.on('route:myroute3, 'update');

allイベントをバインドしようとすると:

this.model.router.bind('all', 'update');

この恐ろしいエラーが発生しました:

TypeError: all[i].apply は関数ではありません

all[i].apply(all[i + 1] || this, args);

ビュー (requirejs モジュールとして定義):

define(['backbone', 'lodash'], function(Backbone, _) {

    return Backbone.View.extend({

        el: 'body',

        initialize: function() {
            this.model.router.bind('all', 'update');

            _.bindAll(this, 'render', 'update');
            this.render();
        },

        render: function() { },

        update: function(route) {
            this.$el
                .find('.nav-collapse a[href=#'+ route +']')
                .parent()
                    .addClass('active')
                    .siblings()
                        .removeClass('active');
        }

    });

});

これは、元のソース コードでエラーが発生する場所です。

 // Execute "all" callbacks.
if (all) {
    args = [event].concat(rest);
    for (i = 0, length = all.length; i < length; i += 2) {
        all[i].apply(all[i + 1] || this, args);
    }
} 
4

1 に答える 1

2

on()/の 2 番目の引数bind()は関数である必要があります。代わりに文字列を渡すことができるのは、文書化されていない機能ですか? その場合、どのオブジェクトでそのメソッドを呼び出しますか? あなたの最初のケースでそれがうまくいくと確信していますか?

代わりにこれを行うとどうなりますか?:

this.model.router.bind('all', this.update);
于 2012-08-15T11:10:24.633 に答える