.bind('all', 'update')上的主干怪异类型错误错误

Backbone weird TypeError error on .bind('all', 'update')?

本文关键字:错误 异类 类型 all update bind      更新时间:2023-09-26

我希望我的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);
    }
} 

on()/bind() 的第二个参数应该是一个函数。这是一个未记录的功能,您可以传递一个字符串吗?在这种情况下,它调用该方法的对象是什么?你确定它在你的第一个案例中有效吗?

如果改为这样做会发生什么?

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