javascript - 我可以获得当前被 knockout 绑定(bind)的元素列表吗?

标签 javascript jquery knockout.js

考虑以下示例:

ko.applyBindings(viewModel, document.getElementById('id'));

有没有什么方法可以通过使用 knockout 来获取“已应用绑定(bind)”的列表?我问是因为我遇到了可怕的情况:

Uncaught Error: You cannot apply bindings multiple times to the same element.

现在很明显错误的含义了。无论我们如何做事,我们通过 ajax 将 View 加载到页面并使用 $(id).html(data) 用所述 View 填充页面,然后在使用后需要 js加载 View ,然后应用绑定(bind)。

现在一切正常,直到我们导航到另一个小部件,根据我们的操作方式,该小部件应该替换页面上的当前 View 和 View 模型(绑定(bind))。这是我收到错误的地方。

那么,在 Knockout 尝试将 View 模型绑定(bind)到元素时,有什么方法可以查看当前的“已应用绑定(bind)”列表吗?

最佳答案

单个元素有一个方法:ko.contextFor。它可以这样使用:

console.log(ko.contextFor(document.getElementById("a")));
console.log(ko.contextFor(document.getElementById("b")));
ko.applyBindings({}, document.getElementById("a"));
console.log(ko.contextFor(document.getElementById("a"))); // Only this shows data
console.log(ko.contextFor(document.getElementById("b")));
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-debug.js"></script>

<div id="a"></div>
<div id="b"></div>

我认为,要为所有 DOM 节点获取它,您必须自己迭代/遍历节点,但这应该不会太难。

另外:不要忘记 Knockout 是开源的,并且有一个未缩小的版本可用。您可以在错误抛出时捕获它,并在该上下文中检查发生了什么:

debug session demo

关于javascript - 我可以获得当前被 knockout 绑定(bind)的元素列表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36878171/

相关文章:

knockout.js - 如何将 Knockout JS 组件 View 模型函数用作回调?

javascript - 在 Knockout JS 中切换

javascript - 使用锤子默认向上滑动

javascript - 选择一个表单复选框

javascript - 尝试使用 Arduino 构建心率传感器

android - 使用 Phonegap 的视频 session 应用程序的最佳工具

javascript - 使用 jQuery 或 JavaScript 从 url 中删除参数

jquery - 使用 knockout.js 和 jqueryUI 的可排序表

javascript - OverlappingMarkerSpiderfier 显示 'spiderfy cluster' 中有哪些标记?

javascript - jQuery ajax 的问题