无法弄清楚出了什么问题。当我点击模型标题时,它会立即获取集合中的所有模型,而不是获取一个模型。如果我将此事件从logView移动到logsView它可以正常工作但无法访问模型,那么我可以使用索引或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"});
答案 0 :(得分:10)
问题是由LogView中的el
引起的:el:$('.accordion')
Backbone的观看事件是视图el
的范围。在这种情况下,您已将视图的el
指定为所有 HTML元素,其类别为" accordion"。因此,当您使用此类单击任何 HTML元素时,代码将针对所有这些运行,这就是您看到此行为的原因。
本文将向您展示一些正确执行所需操作的选项:
我还建议阅读这篇文章,以便更好地理解Backbone中el
的使用,以及它的一些技巧和陷阱: