2012-08-16 39 views
6

真正開始享受KnockoutJs(http://knockoutjs.com)。我的大多數網絡應用程序都是由ajax驅動的。整個站點被加載,然後從鏈接到鏈接,我們只需通過ajax調用來更改主體內容。Knockout.js綁定在Ajax驅動頁面

當ajax返回新的主體內容時,我可以執行我的Knockout綁定。沒問題。當我鏈接到下一頁(只需要更換身體的ajax調用)。我所假設的Knockout建築物仍然在記憶中,但由於dom已經發生變化,所以並不是真正有界的。關於這個主題的幾個問題。

  1. 如果下一個頁面上沒有任何Knockout,那它真的很糟糕,只能留下內存中的淘汰對象嗎?更好的是有沒有辦法重置(清除)淘汰賽對象?

  2. 當我從一個具有敲除綁定的頁面轉到另一個具有敲除綁定的頁面時,只需調用ko.applyBindings()再清除舊的東西並重新綁定新的東西? (當我說從一個頁面到另一個頁面時,我只是用ajax調用重新加載主體)。

  3. 敲除是否有任何「活」綁定。有點像jQuery的活動綁定?通過這種方式,可以將Knockout預先加載,然後不必從內容更改重新應用到內容更改。

一般來說,我正在尋找建議如何在瀏覽器不刷新頁面之間的頁面中最好地使用頁面翻頁。

在此先感謝您的幫助。

+2

此問題可能有助於重置綁定:http://stackoverflow.com/questions/10048485/how-to-clear-remove-observable-bindings-in-knockout-js – peacemaker 2012-08-16 21:51:13

回答

1

1)如果下一個頁面沒有任何Knockout,那它真的很糟糕,只能留下內存中的淘汰對象嗎?更好的是有沒有辦法重置(清除)淘汰賽對象?

不,這並不壞;但如果你真的想清理,那麼你可以撥打ko.removeNode


2)當我從一個頁面有淘汰賽綁定到另一個具有淘汰賽綁定不只是打電話ko.applyBindings()再次明確了舊的東西,並重新綁定新的東西去? (當我說從一個頁面到另一個頁面時,我只是用ajax調用重新加載主體)。

這取決於。

首先,作爲GregT mentioned

一個人不應該叫一次applyBindings()更多的相同DOM節點(一個或多個)上。

經驗告訴我 - 調用不止一次ko.applyBindings()更多的相同DOM節點上會導致內存泄漏。 [如果您需要這樣做,請致電ko.cleanNode()。]

OTOH,如果你不叫一次ko.applyBindings()更多的相同DOM節點上,那麼你應該罰款because:添加/刪除節點時,

KO會做一些清理。發生這種情況的典型時間是重新渲染模板時。


3)淘汰賽是否有任何 「活」 的綁定。有點像jQuery的活動綁定?通過這種方式,可以將Knockout預先加載,然後不必從內容更改重新應用到內容更改。

不是我所知道的,但是如果我正確理解您的問題,則不應該需要任何本地Knockout功能來實現您所需的功能。您應該能夠使用jQuery的on()方法自行連線(因爲live()已被棄用)。