2012-11-25 59 views
1

似乎淘汰賽會銷燬分離元素上的綁定。因此,如果我應用綁定並分離該元素,則不僅會在元素分離時計算綁定,而且在將元素重新插入文檔之後仍然會損壞綁定。分離式元素上的淘汰賽綁定

因此,像:

ko.applyBindings(items, $list[0]); 

items.push('one'); 

$list.detach(); 

items.push('two'); 

$container.append($list); 

items.push('three'); 

這裏有一個小提琴:http://jsfiddle.net/nicholasstephan/KejYc/2/

的在$列表綁定應該讀一個,二生三,而是每次更新後的分離,不計算。

我應該在這裏做什麼來完成這項工作?

回答

1

在末尾應用綁定makes your fiddle work。但我不想象這就是你正在拍攝的內容:

var $container = $("#container"); 
var $list = $('#list'); 
var items = ko.observableArray([]); 

items.push('one'); 
$list.detach(); 
items.push('two'); 
$container.append($list); 
items.push('three'); 
ko.applyBindings(items, $list[0]); 

This SO thread建議您只需重新申請綁定後,每次分離或簡單地隱藏元素,而不是分離他們。還有幾條評論表明這種方法在這種情況下應該重新考慮,這似乎是最好的答案。

也許你可以提供所需的行爲,而不是一個人爲的例子?這可能會有很長的路要推薦替代模型。假設你的目標是創建可拖動的元素(即興,它是唯一真正可能發生的情況,我就需要拆卸/重新插入的元素),你可以採取這樣的做法:

  1. 阻力發起
  2. 拖動元素的副本(留在文檔原件)
  3. 拖停止
  4. 副本從原來的任何必要的數據複製
  5. 在新的/有效位置
  6. 插入複製元素刪除舊的元素
  7. call ko.apply關於新元素的綁定
+0

謝謝。我在一個選項卡式應用程序中遇到了這個問題。我試圖分離不活動的選項卡以保持DOM清潔。這是一個相當大的應用程序,所以我認爲每一點都會有所幫助。簡單地隱藏它們已經解決了這個問題。但是這引出了一個問題:隱藏的DOM元素對瀏覽器性能有什麼影響?乾杯。 – nicholas

+0

如果你使用'display:none',它應該表現的很好。在這種情況下元素實際上是從DOM中刪除的。另一方面,「可見性:隱藏」將會影響性能。您可能會考慮在「用戶體驗」中發佈屏幕截圖或用戶界面描述,並查看他們的建議;必須是比標籤更好的模型! – Kato