如何在不使用 ko.cleanNode 方法的情况下对同一元素使用 applyBindings

How to use applyBindings for same element without using ko.cleanNode method

我正在 KnockoutJS 中创建简单的应用程序,这里我需要更多输入元素以通过单击按钮进行更新。我使用了 ko.applyBindings(viewModel),但它抛出了以下错误。

Uncaught Error: You cannot apply bindings multiple times to the same element. at applyBindingsToNodeInternal (VM88 knockout-debug.js:3287)

我找到了一个解决方案,如果我使用 ko.cleanNode(node) 它可以解决我的问题。但我不想要这个,因为我有很多输入元素。所以很明显我需要为每个按钮点击清理每个节点。任何其他通用解决方案将 applyBindings 用于同一元素,否则我需要更改核心?

applybind = function() {
  viewModel = {
    nValue: ko.observable(10)
  }
  //ko.cleanNode(document.getElementById("txt")); // Don't want this.
  ko.applyBindings(viewModel);
}

ko.applyBindings({
  nValue: ko.observable(100)
}); //initial load.
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<input type="text" id="txt" data-bind="value: nValue" />
<input type="button" value="update value" onclick="applybind()" />

一般来说 ko.applyBinding 方法应该只被调用一次。之后,您可以简单地更改可观察值,更改将立即反映在 UI 中。 我已经相应地更改了你的片段。

viewModel = {
  nValue: ko.observable(100)
}

applybind = function() {
  viewModel.nValue(10);
}

ko.applyBindings(viewModel); //initial load.
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<input type="text" id="txt" data-bind="value: nValue" />
<input type="button" value="update value" onclick="applybind()" />