如何清除/删除 Knockout.js 中的可观察绑定?

2024-04-19

我正在将功能构建到用户可以多次执行的网页上。通过用户的操作,创建一个对象/模型并使用 ko.applyBindings() 将其应用于 HTML。

数据绑定 HTML 是通过 jQuery 模板创建的。

到目前为止,一切都很好。

当我通过创建第二个对象/模型并调用 ko.applyBindings() 重复此步骤时,我遇到两个问题:

  1. 标记显示先前的对象/模型以及新的对象/模型。
  2. 发生与对象/模型中的属性之一相关的 JavaScript 错误,尽管它仍然在标记中呈现。

为了解决这个问题,在第一遍之后,我调用 jQuery 的 .empty() 来删除包含所有数据绑定属性的模板化 HTML,以便它不再位于 DOM 中。当用户启动第二遍流程时,数据绑定 HTML 会重新添加到 DOM 中。

但就像我说的,当 HTML 重新添加到 DOM 并重新绑定到新的对象/模型时,它仍然包含来自第一个对象/模型的数据,并且我仍然收到不会发生的 JS 错误在第一遍期间。

结论似乎是 Knockout 保留了这些绑定属性,即使标记已从 DOM 中删除。

所以我正在寻找一种从 Knockout 中删除这些绑定属性的方法;告诉淘汰赛不再有可观察的模型。有没有办法做到这一点?

EDIT

基本流程是用户上传文件;然后,服务器使用 JSON 对象进行响应,将数据绑定的 HTML 添加到 DOM,然后使用 JSON 对象模型将 JSON 对象模型绑定到此 HTML

mn.AccountCreationModel = new AccountViewModel(jsonData.Account);
ko.applyBindings(mn.AccountCreationModel);

一旦用户对模型进行了一些选择,相同的对象就会被发送回服务器,数据绑定的 HTML 将从 DOM 中删除,然后我将得到以下 JS

mn.AccountCreationModel = null;

当用户希望再次执行此操作时,重复所有这些步骤。

恐怕代码太“复杂”,无法进行 jsFiddle 演示。


您是否尝试过在 DOM 元素上调用淘汰赛的 clean 节点方法来处理内存中绑定的对象?

var element = $('#elementId')[0]; 
ko.cleanNode(element);

然后,使用新视图模型在该元素上再次应用淘汰绑定将更新您的视图绑定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何清除/删除 Knockout.js 中的可观察绑定? 的相关文章

随机推荐

  • 通过ARM模板提供经典云服务

    在我们的一个项目中 我们正在尝试在 Azure 上自动部署云组件 对于大多数组件 基本上所有 ARM 组件 如 Redis 服务总线 应用服务等 我们能够使用 ARM 模板和 Powershell 脚本来实现它 然而 我们却陷入了困境云服务
  • List.filter 中的下划线

    为什么这不起作用 List true false filter size 错误说
  • Ruby:未初始化常量 Log4r::DEBUG (NameError) 问题

    使用时log4r在 Ruby 中 我编写了一个类似于以下内容的配置文件 require rubygems require log4r require log4r outputter datefileoutputter SERVICE LOG
  • 单例模式 - 早期绑定(涉及静态变量)是否会减少互斥锁的需要?

    他们说早期绑定解决了同步问题 我无法理解 如何 这是 Java 的特殊之处还是 C 也同样适用 那么 使用这种方法我们实际上不需要互斥锁 JVM 确保每个类都已完全加载 然后才允许通过其他线程对其进行任何访问 这意味着所有静态变量 包括un
  • 发送一系列命令并等待响应

    我必须更新连接到串行端口的设备上的固件和设置 由于这是通过一系列命令完成的 因此我发送命令并等待收到答案 在答案 多行 中 我搜索一个字符串 该字符串指示操作是否成功完成 Serial gt write boot 1000 Serial g
  • C# 中的图像处理库[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 从哪里可以获得 C Net 中的图像处理库 edit 在这里查看列表https github com quozd awesome dotn
  • 使用 ConcurrentHashMap 避免空指针异常

    我知道这个问题已被问过多次 但我没有找到该问题的正确答案 从 ConcurrentHashMap 获取结果时如何避免抛出 NullPointerException 我有下面的代码 它向我抛出一个空指针 public static Strin
  • Python C Api 将 PyObject * 传输到 c 数组中

    我使用 python c api 并希望从 python 返回一个数组 我从 python 端返回了一个 python 数组 并希望将 PyObject 结果传输到一个 c 数组中 以便我可以使用它 我能做到吗 附带问题 在什么情况下尝试返
  • Objective C 中 NSArray、NSDictionary 等类的可变和不可变版本背后的逻辑是什么?

    为什么 Objective C 中常见的集合类 如 NSString NSArray NSDictionary 等 有可变版本和不可变版本 分别定义它们背后的逻辑是什么 性能 内存管理还是其他什么 类的不可变版本之所以存在 是因为不可变对象
  • Ruby 访问哈希元素

    我有以下哈希 title gt ga browser Firefox dimensions gt browser gt Firefox metrics gt pageviews gt 25474 id gt http www google
  • navigator.language 所有语言的列表

    我在哪里可以看到语言及其代码列表 我想比较语言并在模板中自动选择所需的语言 它们跨浏览器相同吗 还有其他解决方案吗 出于复制和粘贴目的 af af NA af ZA agq agq CM ak ak GH am am ET ar ar 00
  • 如何在 gdb 上进行 grep 打印

    有没有办法在 gdb 中 grep 打印命令的输出 就我而言 我正在使用 gdb 调试核心转储 并且我正在调试的对象包含大量元素 我发现很难寻找匹配的属性 即 gdb print this grep
  • Java Collat​​or 与 MySQL 的 utf8_general_ci 排序规则具有相似的特性

    有没有Collator与MySQL的utf8 general ci具有相同特征的实现 我需要一个不区分大小写的整理器不区分德语元音变音如 与元音a 背景 我们最近遇到了一个错误 该错误是由表中的错误排序规则引起的 使用的排序规则是utf8
  • Xamarin 表单从可绑定属性更新视图模型字段

    我觉得我错过了一些非常明显的东西 我有一个自定义控件 它有一个视图模型 其中包含一堆字段 但此示例中最重要的是文本值 我可以使用自定义控件 XAML 中的以下内容非常轻松地绑定到它
  • 获取 Spotify 当前播放的曲目

    编辑 让我们尝试澄清这一切 我正在编写一个 python 脚本 我希望它告诉我 Spotify 当前正在播放的歌曲 我尝试寻找可以帮助我的库 但没有找到任何仍在维护和工作的库 我还浏览了 Spotify 的 Web API 但它没有提供任何
  • Rails + Cucumber/Capybara:如何在测试中设置/检索 cookie?

    我正在实现延迟登录功能 我的黄瓜功能应该描述它 Feature User log in Scenario Lazy login Given I didn t log out the last time I was on the site W
  • Qt 在信号/槽中使用 boost::shared_ptr

    是否可能 如果可以 如何在 Qt 中创建一个对共享指针常量引用的信号 槽 我想要一个如下所示的信号 void signal shared ptr
  • Python 电子邮件机器人 Pyzmail/IMAPclient 错误

    所以我正在编写一个Python脚本来从电子邮件中提取文本并遵循这些说明 https automatetheboringstuff com chapter16 这样做 这是迄今为止的脚本 import imapclient import pp
  • JavaScript - 获取浏览器支持的区域设置的完整列表

    我发现了支持的语言环境 https developer mozilla org en US docs Web JavaScript Reference Global Objects DateTimeFormat supportedLocal
  • 如何清除/删除 Knockout.js 中的可观察绑定?

    我正在将功能构建到用户可以多次执行的网页上 通过用户的操作 创建一个对象 模型并使用 ko applyBindings 将其应用于 HTML 数据绑定 HTML 是通过 jQuery 模板创建的 到目前为止 一切都很好 当我通过创建第二个对