javascript – 新的Backbone View’事件’哈希如何在0.9.0版本中使用函数值而不是字符串?

前端之家收集整理的这篇文章主要介绍了javascript – 新的Backbone View’事件’哈希如何在0.9.0版本中使用函数值而不是字符串?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Backbone 0.9.0更新日志说:

A view’s events hash may now also contain direct function values as
well as the string names of existing view methods.

当我尝试以下操作时失败,说该事件的值未定义.

var BB = Backbone.View.extend({
  'initialize': function() {

    this.$el.html('<input type="button" value="Click me!" />');
    jQuery('body').html(this.el);
  },'events': {
    'click input[type="button"]': this.buttonClicked
  },'buttonClicked': function() {
    alert('button clicked!');
  }

});

window.b = new BB()

我误解了这个新功能吗?有人可以解释它的工作方式与我预期的不同吗?也许这只是我在定义时的’this’的JavaScript语法/值被塞住了.

我习惯做的方式仍然有效:

'events': {
  'click input[type="button"]': 'buttonClicked'
},

解决方法

当JavaScript解析器到达时:
'events': {
  'click input[type="button"]': this.buttonClicked
},

这可能是窗口,而不是您期望的BB实例. window对象没有buttonClicked属性(至少在你的情况下不是这样)所以你真的这么说:

'events': {
  'click input[type="button"]': undefined
},

而且你的错误.

如果您查看delegateEvents的源代码,您将看到ChangeLog的含义:

delegateEvents: function(events) {
  // ...
  for (var key in events) {
    var method = events[key];
    if (!_.isFunction(method)) method = this[events[key]];
    // ...
  }
},

_.isFunction电话是你感兴趣的.这意味着你可以这样说:

events: {
  'click input[type="button"]': function() { alert('pancakes!') },'click button': some_function_that_is_in_scope
}

因此,您可以在事件查找表中放置已定义的函数(通过它们的名称,如果它们可访问或作为函数文字).

猜你在找的JavaScript相关文章