BackBone JS事件可以调用匿名函数吗?

时间:2013-07-23 21:05:36

标签: javascript backbone.js backbone-events

所以,假设我在模型上有一个事件监听器:

this.listenTo(anotherModel, 'change:whatever', this.myMethod);

什么是myMethod是一个超级简单的一行代码片段?我想在这种情况下使用匿名函数,但我似乎无法做到这一点。

this.listenTo(anotherModel, 'change:whatever', function() {
  //The simplest code in the world
});

我该怎么办?或者我的对象注定要用单行方法填充?

1 个答案:

答案 0 :(得分:3)

绑定不需要访问视图实例的匿名函数:

this.listenTo(anotherModel, 'change:whatever', function() {
  console.log('whatever changed!');
});

通过ECMAScript的function.bind绑定需要访问视图实例的匿名函数:

this.listenTo(anotherModel, 'change:whatever', function() {
  this.$el.append('whatever changed');
}.bind(this)); //the .bind here is key!

...或只是传递第4个参数,Backbone将为您绑定上下文

this.listenTo(anotherModel, 'change:whatever', function() {
  this.$el.append('whatever changed');
}, this); //the this here is key!

对于它的价值,从技术上讲,你的普通骨干视图“方法”是一个匿名函数:

Backbone.View.extend({someMethod: function() {/*this function is anonymous technically*/}});

这一切都很好。为了保持一致性,我总是将我的事件处理函数定义为视图方法,并且通常清楚地命名它们:

Backbone.View.extend({
    events: {'click .start', 'onClickStart'},
    initialize: function () {
        this.listenTo(this.model, 'change', this.onChange);
    },
    onClickStart: function() {/*awesome code here*/},
    onChange: function() {/*more awesome code here*/}
});

请注意,这也有助于提高可测试性。