2015-10-16 37 views
-1

我有一个应用程序没有优化设计。我没有时间重新编写它,并需要找到解决以下问题的方法:主干替换视图/获取视图位置

在我的应用程序中,可能会将新元素添加到集合中,并且集合视图中有一个函数用于决定是否在顶部或底部插入新元件:

if (someLogic) { 
    this.$container.prepend(newEl); 
} else { 
    this.$container.append(newEl); 
} 

还有可能编辑元件;在这种情况下,应用程序首先破坏旧视图,如果有任何:

item.trigger('destroyView'); 

然后呈现它。以某种方式将其在相同的地方呈现它以前:

+--------+   +--------+ 
| x1 |   | x1 | 
+--------+   +--------+ 
| x2 |   | x2 | 
+--------+ ====> +--------+ 
| x3 |   | x3a | 
+--------+   +--------+ 
| x4 |   | x4 | 
+--------+   +--------+ 

现在,由于一些变化,已编辑的元素是在顶部或在收集视图的底部呈现。

我的问题是:我如何在与之前相同的位置渲染它。
我试图在解释here时在模型上添加一个监听器,但是其中一些编程逻辑似乎已被破坏。

有没有什么办法:

  1. 更换新绘制一个现有的看法?

    或通过遍历容器视图元素

  2. ,得到相应的模型? (模型有其指示顺序的属性,所以可以使用insertAfterinsertBefore

回答

0

想出的是,解决方案比我想更容易。

在我得到新模型的地方,我可以确定模型是否已经存在。
如果它存在,,而不是摧毁旧视图并再次渲染它,我只需发送一个触发器,的观点再次呈现,在相同的地方是:

容器视图:

var model = this.collection.findWhere({id:newInteractionData.id}); 
if (model) { 
    model.trigger('render'); 
} else { 
    // here comes the old 'render' code 
} 

项目视图:

this.listenTo(this.model, "render", this.render);