2015-10-16 36 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);