アプリをどのように構成したかを説明していただければ、より適切な回答が得られる可能性があります。
これまでのところ、私が言えることは、モデルを 1 つずつレンダリングすることが最善の戦略であるということです。私が話していることをよりよく理解するには、todo のサンプル コードを見てください。
また、jquery を使用していると仮定します。
その例では、メイン アプリに、コレクション全体 (addAll) に適用される関数と、単一のモデルに適用される別の関数があります。
// Add all items in the **Todos** collection at once.
addAll: function() {
MYCOLLECTION.each(this.addOne);
},
addOne: function(todo) {
var view = new TodoView({model: MYMODEL});
this.$("#list").append(view.render().el);
},
このフレームワークでは、次のように、単一のモデル関数のビューで view.render() をコーディングするだけで済みます。
el:$('ul .test0'),
render: function() {
if (!_.isNull(this.model.get('parent_id')) ){
if($("." + this.model.get('parent_id')).length == 0) {
//the class doesn't exist because the <ul> hasn't been created yet
//so create the <ul> tag
$('#'+this.model.get('parent_id')).append("<ul class='"+this.model.get('id')+"'></ul>");
}
//now append the <li> element
$('.'+this.model.get('parent_id')).append("<li id='"+this.model.get('id')+"'>"+this.model.get('name')+"</li>");
}
else{
$(this.el).append("<li id='"+this.model.get('id')+"'>"+this.model.get('name')+"</li>");
}
this.$el.html(this.template(this.model.toJSON()));
this.$el.toggleClass('done', this.model.get('done'));
this.input = this.$('.edit');
return this;
},
最後に、このようなリストが表示されます
<ul class='1'>
<li id='1'>test1</li>
<li id='2'>test2</li>
<ul class='2'>
<li id='3'>test3</li>
<li id='4'>test4</li>
</ul>
</ul>
アイデアを得ますか?お役に立てれば。