Backbone.js 主干-扩展视图和僵尸
我在列表视图中呈现主干模型的集合,其中每个模型都有自己的listItemView,例如Backbone.js 主干-扩展视图和僵尸,backbone.js,Backbone.js,我在列表视图中呈现主干模型的集合,其中每个模型都有自己的listItemView,例如 var els = []; _.each(this.collection.models, function(model){ var view = new TB_BB.RequestItemView({model : model}); els.push(view.render().el); }); $
var els = [];
_.each(this.collection.models, function(model){
var view = new TB_BB.RequestItemView({model : model});
els.push(view.render().el);
});
$('#request-list').append(els);
每个ItemsView都可以在单击事件(调用服务器)时展开,例如
所以逻辑是这个扩展视图在当前项的el中打开。您可能已经注意到,我正在传递对当前视图的引用(outerthis),这是为了避免在关闭展开视图时出现此视图的僵尸
因此,在展开视图中,我们有一个“hide”方法,它应该隐藏展开视图并显示原始元素,例如(其中current是对非展开视图的引用)
我很确定这不是最好的方法,但不确定什么是最好的方法?在这种情况下,在调用hidedetails(作为其引用原始视图)时没有僵尸。然而,我猜每次调用并关闭“showDetails”视图时,都会出现一个新的僵尸?有谁能告诉我们,扩大列表视图的更好方法是什么 我过去也遇到过类似的情况,我必须呈现一个树型结构,列表项打开以显示子列表,然后再次关闭。我实现该解决方案的方法是将如下内容作为html结构:
<div class="list-item">
<div class="handle closed" />
<span><%= title %></span>
<div class="sub-list" />
</div>
因此,每个列表项都为子视图呈现了一个空元素。然后在单击处理程序中,我将检查此列表项是否已经为子列表创建了视图,如果是,则只显示子列表元素;如果没有,则创建子列表视图,该视图呈现ajax-loader.gif并调用collection.fetch来获取数据
所以我的建议是使用单独的dom元素,惰性地创建子视图,并在关闭某个对象时隐藏dom元素,保留对视图的引用
hideDetails : function() {
$(this.el).empty();
this.options.current.render();
}
<div class="list-item">
<div class="handle closed" />
<span><%= title %></span>
<div class="sub-list" />
</div>