2012-01-15 135 views
0

我一直无法通过我的item_match_result函数获取点击事件。backbone.js点击事件未注册

我已经尝试将item_match_result放入ItemList视图中,因为它是父类,但无法使其工作,它确实属于ItemMatch视图。

有什么建议?

MyApp.Views.ItemList = Backbone.View.extend({ 
    tagName: 'li', 
    className:'item_list', 
    ... 

    render_item_match: function(model){ 
      var item_match = new MyApp.Views.ItemMatch({model:model}); 
     $(this.el).append(item_match.el); 
     } 


}); 

MyApp.Views.ItemMatch = Backbone.View.extend({ 
    tagName: 'a', 
    className: 'item_match_result', 

    initialize: function(){ 
     _.bindAll(this,"item_match_result"); 
     this.render(); 
    }, 


    events : { 
     "click a.item_result": "item_match_result" 
    }, 

    render : function(){ 
     this.el = HandlebarsTemplates['items/itemSearchResultItem'](this.model.attributes); 

    }, 

    item_match_result: function(){ 
    console.log(this); 
    } 
}); 


}) 

回答

3

您不能替换this.el并使其仍然有效。你只是杀死了事件绑定的元素。如果你这样做,你需要再次运行this.delegateEvents()来重新绑定它。

MyApp.Views.ItemMatch = Backbone.View.extend({ 
    tagName: 'a', 
    className: 'item_match_result', 

    initialize: function(){ 
     _.bindAll(this,"item_match_result"); 
     this.render(); 
    }, 


    events : { 
     "click a.item_result": "item_match_result" 
    }, 

    render : function(){ 
     this.el = HandlebarsTemplates['items/itemSearchResultItem'](this.model.attributes); 

     this.delegateEvents() 

    }, 

    item_match_result: function(){ 
    console.log(this); 
    } 
}); 
+1

了'delegateEvents'实际上并没有为我工作哈利,但是我用'$(this.el)的.html(车把...)'和得到它的工作,所以我给你点指着我在正确的方向。 – pedalpete 2012-01-15 23:33:19