【问题标题】:How to remove knockoutjs bindings from entire dome如何从整个圆顶中删除 knockoutjs 绑定
【发布时间】:2013-04-05 14:48:05
【问题描述】:

我已经建立了一个使用淘汰赛的页面,因为它有很多东西,而且效果非常好。

当导航发生时,我的问题就出现了: 页面加载 - 效果很好 用户离开 - 效果很好 用户按下返回按钮 - 原始分页符

在我看来,一旦页面返回到使用后退按钮,原始绑定仍然存在,然后页面下载其数据并调用 ko.applyBinding,导致绑定应用两次破坏页面。

如何去掉原来的绑定,我需要页面绑定到新下载的数据,而不是导航前可用的数据。

任何帮助将不胜感激。

【问题讨论】:

  • 您在代码中的哪个位置应用了绑定? $(function() {}) // dom ready jquery 或者只是在页面底部的脚本标签等?
  • 是的,我正在使用 jquery $(function(){});

标签: javascript binding knockout.js


【解决方案1】:

这里有一个想法来自:https://stackoverflow.com/a/13459885/989516

ko.unapplyBindings = function ($node, remove) {
    // unbind events
    $node.find("*").each(function () {
        $(this).unbind();
    });

    // Remove KO subscriptions and references
    if (remove) {
        ko.removeNode($node[0]);
    } else {
        ko.cleanNode($node[0]);
    }
};

【讨论】:

  • 我确实遇到了该代码并尝试了它,但无法让它正常工作。不断抛出“Uncaught TypeError: Object # has no method 'find'”错误
  • 可能是因为它应该是一个 jQuery 包装的节点。这就是 find() 方法的来源。所以也许可以尝试调用 ko.unapplyBindings($('#container'), true),其中 'container' 是某些外部元素的 id,其内容将被替换。或者 ko.unapplyBindings($(document), true)
  • 很好的提示,它似乎确实部分工作,但主要问题仍在发生。
  • 用户导航离开后,您的视图模型是否在全局(窗口)范围内徘徊?或者您的视图模型是否包含对全局对象的任何引用?如果是这样,您可以删除这些,以便所有内容都在被卸载的视图中吗?也许尝试将其隔离在像 ;(function() { var foo = 'bar'; }()); 这样的闭包中
猜你喜欢
  • 2012-08-14
  • 2012-12-09
  • 1970-01-01
  • 2015-01-22
  • 1970-01-01
  • 1970-01-01
  • 2022-11-30
  • 1970-01-01
  • 2011-05-14
相关资源
最近更新 更多