【问题标题】:Can I get a list of elements currently bound by knockout?我可以获得当前被淘汰赛绑定的元素列表吗?
【发布时间】:2016-04-28 00:31:39
【问题描述】:

考虑以下示例:

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

有没有办法通过使用敲除来获取“应用绑定”列表?我问是因为我有一种情况让我感到害怕:

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

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

现在这有效,直到我们导航到另一个小部件,根据我们的操作方式,它应该替换页面上的当前视图和视图模型(绑定)。这是我得到错误的地方。

在 Knockout 尝试将视图模型绑定到元素时,有什么方法可以查看当前的“应用绑定”列表?

【问题讨论】:

    标签: javascript jquery knockout.js


    【解决方案1】:

    单个元素有一个方法: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 是开源的,并且有一个未缩小的版本可用。您可以在抛出错误时捕获它,并在该上下文中检查发生了什么:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-18
      • 1970-01-01
      • 1970-01-01
      • 2014-05-31
      • 2013-02-04
      • 2014-10-29
      • 1970-01-01
      相关资源
      最近更新 更多