2012-02-12 123 views
7

無法弄清楚什麼是錯的。當我點擊一個模型標題時,它會立即獲取集合中的所有模型,而不是獲取一個模型。如果我將此事件從logView移動到logsView,它可以正常工作,但無法訪問模型,我可以使用index或ant其他模型的ID來找到此模型,但不認爲這是一個好方法。骨幹點擊事件觸發所有收集而非模型的事件

var Log = Backbone.Model.extend({}); 


window.LogsList = Backbone.Collection.extend({ 
    model:Log, 

    url:function (tag) { 
     this.url = '/logs/' + tag; 
     return this; 
    } 
}); 

window.colList = new LogsList(); 

window.logView = Backbone.View.extend({ 
    el:$('.accordion'), 

    template:_.template($('#log').html()), 

    initialize:function() { 
     this.model.bind('add', this.render, this); 
    }, 

    events:{ 
     "click .accordion-toggle" :"getLogBody" 
    }, 

    render:function() { 
     return this.template(this.model.toJSON()); 
    }, 

    getLogBody:function() { 
     this.model.fetch(); 
    } 
}); 

window.LogsView = Backbone.View.extend({ 
    el:$("#content"), 

    initialize:function (options) { 
     colList.bind('reset', this.addAll, this); 
     colList.url(options.data).fetch(); 
    }, 

    addOne:function (model) { 
     var view = new logView({model:model}); 
     $("#accordion").append(view.render()); 
    }, 

    addAll:function() { 
     colList.each(this.addOne); 
    } 
}); 

window.listView = new LogsView({data:"Visa_Cl"}); 

回答

10

問題是由您的el在日誌查看造成的:el:$('.accordion')

骨幹的看法事件範圍,視圖的el。在這種情況下,您已將視圖的el指定爲ALL具有「手風琴」類的HTML元素。因此,當您使用此類單擊您的HTML元素的任何時,代碼會爲所有這些代碼運行,這就是您看到此行爲的原因。

這篇文章將告訴你做幾個選項,你想要什麼,正確:

我也建議你閱讀這一塊,以更好地理解骨幹使用el ,和一些它的詭計和陷阱:

+0

謝謝,我懷疑我搞砸了。 – nateless 2012-02-12 19:44:35

+0

謝謝你!優秀的資源! – 2012-05-26 00:15:23

+0

謝謝......正是我所需要的。 – 2013-11-06 11:25:52