2011-10-04 37 views
3

看起来好像下面的代码正在进入initialize内部,但我的事件看起来并未触发。无法获取Backbone.js查看要触发的事件

我在这里错过了什么?

var index = (function ($, window, document) { 

    var methods = {}; 

    methods = { 
      init: function() { 

      }, 

      getView: Backbone.View.extend({ 
       el: $('.settings'), 

       events: { 
       'click .settings': 'addUl' 
       }, 

       initialize: function() { 
        console.log('init'); 
       }, 

       render: function() { 
       }, 

       addUl: function() { 
       console.log('addUI'); 
       this.el.append("<ul> <li>hello world </li> </ul>"); 
       } 
      }) 
    }; 

    return methods; } (jQuery, window, document)); 

var stuff = new index.getView();

链接到jsbin

回答

3

'click .settings'

+0

这有效,但为什么在文档中它写'点击.blah' http://documentcloud.github.com/backbone/#View-delegateEvents –

+0

好问题,我开始怀疑我的评论可能是副作用并不是一个合适的解决方案。当我有一些时间时,我会进一步研究它,除非有人回答。 – JaredMcAteer

3

其实完全删除.settings删除的空间。

'click .settings'正在注册与this.el匹配的'.settings'的后代的点击处理程序。

在你的例子中,你想直接在this.el上注册一个事件,所以你不需要后代选择器。

3

问题是,它是您的视图元素($el)具有settings类,而不是孩子。

click .settings通知骨干绑定$el上的“点击”事件,对于任何有.settings的孩子。但是,因为它是$el,它具有类别settings绑定永不匹配。

这就是为什么当你删除.settings它的作品,因为你说“任何‘点击’在$ EL”

的文件说click .blah的原因是因为它假定HTML元素(S)与class='blah'$el元素的子代。

希望得到这个帮助。