骨干模型 - 如何从事件处理程序执行其他功能?

时间:2013-06-22 13:57:03

标签: javascript backbone.js scope this underscore.js

在Backbonejs中,即使处理程序使用外部模型中的函数,是否可以在循环中初始化事件处理程序?

例如我怎样才能得到类似下面的内容?

var MyModel = Backbone.Model.extend({
    eventHandlers: {
        onerror: function(e) {
            this.myErrorHandler(e); // doesnt work
        },
    },

    initialize: function () {
        var myObj = {}
        _.each(eventHandlers, function(value, key) {
            myObj[key] = value;
        }, this);
    },

    myErrorHandler: function(e) {
        console.error('my error handler', e);
    }
});

如何从子对象中声明的事件处理程序中调用Model的错误处理函数(myErrorHandler)?或者还有其他方法可以实现这一目标吗?

TIA

1 个答案:

答案 0 :(得分:1)

你的意思是对由其键定义的事件执行每个处理程序,绑定到模型实例吗?

var MyModel = Backbone.Model.extend({
    eventHandlers: {
        error: function(e) {
            this.myErrorHandler(e); // doesnt work
        }
    },

    initialize: function () {
        var _this = this;
        _.each(this.eventHandlers, function(value, key) {
            _this.on(key, _(value).bind(_this));
        });
    },

    myErrorHandler: function(e) {
        console.error('my error handler', e);
    }
});

但是如果你想为同一个事件安排多个处理程序呢?