2012-08-16 70 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()已被弃用)。