6

真正开始享受 KnockoutJs (http://knockoutjs.com)。我的大多数网络应用程序都是 ajax 驱动的。加载整个站点,然后从链接到链接,我们只需通过 ajax 调用更改正文内容。

当 ajax 返回新的正文内容时,我可以进行 Knockout 绑定。没问题。当我链接到下一页时(只是一个替换正文的 ajax 调用)。我认为 Knockout 建筑物仍在记忆中,但并没有真正受到限制,因为 dom 已经改变。关于这个话题的几个问题。

  1. 如果下一页没有任何 Knockout,那么让 Knockout 对象在内存中徘徊真的有那么糟糕吗?更好的是有没有办法重置(清除)淘汰赛对象?

  2. 当我从一个具有淘汰赛绑定的页面转到另一个具有淘汰赛绑定的页面时,是否只是再次调用 ko.applyBindings() 清除旧内容并重新绑定新内容?(再一次,当我说从一页转到另一页时,我只是用 ajax 调用重新加载正文)。

  3. 淘汰赛是否有任何“实时”绑定。有点像 jQuery 的实时绑定?这种方式可以预先加载 Knockout,然后不必从内容更改重新应用到内容更改。

一般来说,我正在寻找有关如何在浏览器不从页面刷新到页面的应用程序中最好地使用逐页淘汰的建议。

在此先感谢您的帮助。

4

1 回答 1

1

1)如果下一页没有任何淘汰赛,那么让淘汰赛对象在内存中徘徊真的有那么糟糕吗?更好的是有没有办法重置(清除)淘汰赛对象?

不,没那么糟。但如果你真的想清理,那么你可以打电话给ko.removeNode.


2)当我从一个具有淘汰赛绑定的页面转到另一个具有淘汰赛绑定的页面时,是否只是再次调用 ko.applyBindings() 清除旧内容并重新绑定新内容?(再一次,当我说从一页转到另一页时,我只是用 ajax 调用重新加载正文)。

这取决于。

首先,正如GregT 提到的:

不应applyBindings()在同一个 DOM 节点上多次调用。

我从经验中知道 -ko.applyBindings()在同一个 DOM 节点上多次调用会导致内存泄漏。[如果您需要这样做,请致电ko.cleanNode()。]

OTOH,如果您没有ko.applyBindings()在同一个 DOM 节点上多次调用,那么您应该没问题,因为

KO 在添加/删除节点时会进行一些清理。发生这种情况的典型时间是重新渲染模板时。


3) 淘汰赛是否有任何“实时”绑定。有点像 jQuery 的实时绑定?这种方式可以预先加载 Knockout,然后不必从内容更改重新应用到内容更改。

不是我所知道的,但如果我正确理解了您的问题,则您不需要任何本机 Knockout 功能来实现您需要的功能。您应该能够使用 jQuery 的on()方法自己连接它(因为live()已弃用)。

于 2012-09-04T20:07:33.990 回答