2011-03-16 40 views
4

我只是在用backbone.js和一些jQuery魔法來爲即將到來的項目做準備。backbone.js - 模型/視圖如何鏈接到DOM元素?

一個測試用例包含一個表格,其行由主幹視圖呈現。他們完美地重現了價值變化。之後,整個表格通過jQuery插件(Animated Table Sort)排序,行移動到新的位置。事實上,這個過程只有一次,但下一次,行出現兩次,一切都以混亂而告終。

是否有可能DOM元素和骨幹視圖之間的鏈接無法處理這種變化?有沒有解決方法?

回答

3

當您使用像backbone.js或knockout.js這樣的Model/View框架進行開發時,我發現您需要重新安排您的思維和實現,以更改diplayed(如排序)到Model,並且不允許它們在視圖中發生(就像使用jquery插件一樣)。

如果你最終使用視圖端腳本來做一些奇特的事情(動畫是一個很好的例子),那麼由你決定禁用還是擴展綁定來確保模型是正確更新的。

另請注意,根據documentation,該動畫排序插件從DOM中刪除您的表格行,將它們添加到新的DIV中,對它們進行動畫處理,將它們從DIV中移除,然後將它們還原到表格。我想知道這樣做是否完成後,骨幹已經失去了那些TD的蹤跡,當它在改變之後重新渲染時,它只是在上一集「消失」之後添加一個新集。

+0

你可以給一個「禁用或擴展綁定」的例子來確保在使用像jQuery插件這樣的視圖端腳本時正確更新模型嗎? – Chetan 2011-04-18 06:34:01

+0

禁用將停止使用主幹渲染頁面的一部分。只需使用jquery或其他任何東西,並忘記綁定到你的模型。擴展可以是建立一個連接器,用於監聽模型的更新,然後在插件上強制執行它們,同樣地監聽插件事件並確保模型更新了這些更改。這可能是一項艱鉅的工作,尤其是在邊緣情況下,我通常最終只是閱讀jq插件的代碼,取出「祕密醬油」併爲mvp/mvvm框架實現一個插件。 – JoshRivers 2011-04-18 06:52:10

+0

「傾聽你的插件事件並確保模型更新了這些改變」 - 我發現這是對我來說最簡單的事情。這是一個足夠乾淨的解決方案,還是您認爲隨着項目擴展,它可能會導致設計問題? – Chetan 2011-04-18 06:59:50

0

您的系列產品爲您的模型維護一個訂單,因此您的相應視圖。如果一個外部力量(比如jQuery表格排序插件)修改視圖的順序,這個改變並不固有地反映在Backbone集合中,所以事情很快就會失去同步。另外,如果表格分揀機克隆元素並刪除原件,Backbone可能會失去對視圖的追蹤並最終重新創建它們。

1

感謝您的回答。事實上,桌面分揀機做了很多事情,這使得難以維持綁定的fpr主幹。我已經切換到偉大的Quicksand plugin,它使用隱藏列表來動畫另一個(可見)列表中的更改。適合backbone.js。