我最终只是在每个视图的元素上添加了我需要的每个模型的 json。
换句话说:
<ul class="people" data-collection="people">
<li data-model="person" data-attributes='{"name":"Peter"}'>Peter</li>
<li data-model="person" data-attributes='{"name":"John"}'>John</li>
</ul>
在我的例子中,每个属性上的 JSON 片段在服务器上生成是微不足道的。
我更喜欢在 html 中包含嵌入的 json 而不是在开始时将它返回到一个大数组中的原因是,这样我可以很容易地将模型附加到他们的视图中。
其余的从那里流出。
我使用 jquery 来检测data-collections
并创建与 DOM 元素关联的相应视图。然后我解析模型,最后我开始在集合视图上监听事件。
$(function(){
$('[data-collection="people"]').each(function() {
var view = new PeopleView({el: this});
view.parse();
view.listen();
});
});
和方法如下所示parse
:listen
MyApp.PeopleView = Backbone.View.extend({
collection: MyApp.Collections.People,
...
parse: function() {
var people = this.$("[data-model='person']").map(function(i,el){
return new MyApp.Models.Person($(el).data('attributes'));
};
this.collection.reset(comments, {silent: true});
},
listen: function() {
this.listenTo(this.collection, 'add', this.showNewPerson, this);
this.listenTo(this.collection, 'reset', this.renderEveryone, this);
this.delegateEvents();
}
...
});
在这种特殊情况下,我不需要为列表中的每个人创建特定的 Backbone 视图。但如果我需要,我可以在parse
方法中这样做。