Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 主干-扩展视图和僵尸_Backbone.js - Fatal编程技术网

Backbone.js 主干-扩展视图和僵尸

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); }); $

我在列表视图中呈现主干模型的集合,其中每个模型都有自己的listItemView,例如

 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>