2013-04-12 109 views
5

我正在綁定backbone.js的render函數中的一些事件,更具體地說是click,但是,我無法讓它工作。backbone.js render()中的觸發事件

我有一個類似的(但非常簡單)建立於:

App.ProductView = Backbone.View.extend({ 

className: 'title_products_tab', 
el: $('.title_products_tab'), 

events: { 
    'click .product_list .edit_product' : 'edit', 

對於我的看法骨幹的事件部分。向下渲染函數內我希望觸發綁定.edit_productclick事件:

render: function(){ 
     console.log($._data($('.title_products_tab .product_list .edit_product')[0], "events")); 
     $('.title_products_tab .product_list .edit_product').trigger('click'); 

不工作時,_data的元素是不確定的,但是,我知道的情況下做的,因爲剩下的我的看法職能工作因此。我似乎無法觸發render或其他任何啓動事件。

我想:但是

this.trigger('click .product_list .edit_product'); 

會的工作,又沒有運氣。

我也聽說過bindAll,但我聽說這不是一個好主意。

那麼,我該怎麼做,或者更確切地說,在什麼時候爲我的骨幹視圖觸發啓動事件?

+0

當你打你的渲染方法是什麼?在初始化方法中? – Loamhoof

+0

@Loamhoof事實上,在init方法中 – Sammaye

回答

2

所以,你會發現這個有趣的(注:骨幹的代碼):

var View = Backbone.View = function(options) { 
    this.cid = _.uniqueId('view'); 
    this._configure(options || {}); 
    this._ensureElement(); 
    this.initialize.apply(this, arguments); 
    this.delegateEvents(); 
}; 

尤其是最後一部分。 事件綁定之後調用初始化方法,所以調用render方法後。事件尚未結合。

(我想你可以手動調用delegateEvents如果你真的需要做你的方式)

+0

骨幹支持沒有優雅的方式嗎? :( – Sammaye

+0

嗯,我想你可以簡單地自己調用這個方法:'this.edit()'。換另一行代碼,看起來並不是那麼糟糕;) – Loamhoof

+0

這是一個好主意,雖然它重視一個產品列表,如果該列表的大小爲1,我爲用戶選擇該列表的唯一條目,通過內部編碼進行編程對我來說不會有好處;我目前使用主幹作爲標準化已經存在的表格的前端的手段;啊,我只是做代表,謝謝:) – Sammaye