javascript - Knockout 组件 - 不能多次应用绑定(bind)

标签 javascript knockout.js knockout-components

我正在尝试使用挖空组件创建一个页面,但在尝试绑定(bind)一个页面中的多个组件时遇到了一些麻烦,如果它们不是同时添加的话。据我所知,我无法直接访问组件的 View 模型,将其绑定(bind)到特定元素。

ko.applyBindings(viewModel, document.getElementById("component1"));

我的问题是,因为我必须使用更通用的

ko.applyBindings()

如果我稍后将另一个组件添加到页面并想要绑定(bind)它,我会收到“您不能将绑定(bind)多次应用到同一元素”。错误。

我有什么方法可以访问组件 View 模型并直接应用它吗?

$('body').append('<div id="compoent1" data-bind=\'component: { name:"someComponent"\}'></div>')
ko.applyBindings(viewModel/*How do I get this?*/, document.getElementById("component1"));

我试过只用

ko.applyBindings(document.getElementById("component1"));

我的解释可能有点难以理解,这是我正在尝试做的伪代码:

Add a knockout component
Apply bindings for the knockout component
.... some time later in my single page application
Add another knockout component
Apply bindings for the new knockout component

最佳答案

在我看来,您可能正在尝试使用非 knockout 方法添加组件。

一旦您进行 knockout ,最好将所有内容都保留在 knockout 中,并抵制为“快速获胜”而退回到 jQuery 或直接 DOM 操作的诱惑。它总是在以后咬你......所以:

 <foocomponent params="woo:'fwoo'"></foocomponent >
 <!-- ko if:someBooleanObservableThatChangesLater -->
     <myawesomecomponent params="choo:'boo'"></myawesomecomponent >
 <!-- /ko -->

现在我们通过更改根模型中的可观察对象“添加”了第二个组件 (someBooleanObservableThatChangesLater)。无需重新绑定(bind)。

您的情况可能与我上面相当简单的示例有些不同,但希望意图是明确的。您可以通过将项目插入 observableArray 并在其上使用 foreach 绑定(bind)来获得类似的行为,以便在您更改 时将内容添加到 DOM 或从 DOM 中删除可观察数组。再一次,不需要第二次调用 applyBindings

关于javascript - Knockout 组件 - 不能多次应用绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29694908/

相关文章:

javascript - 在jquery中解析xml并将xml元素存储在数组中

javascript - Js toString 是如何工作的?

javascript - foreach 项目上的 knockout 绑定(bind)未更新

javascript - 如何使 Knockout.js 组件附加到页面而不删除/覆盖任何旧绑定(bind)?

javascript - 对 Firefox browser.xul 的更改未实时更新

knockout.js - 复选框不会在 Knockout 中使用数据绑定(bind)保持选中状态

javascript - 在 Knockout 中更新可观察数组中项目的属性

knockout.js - 获取knockout.js 自定义组件内容

javascript - 如何在knockout js组件中添加twitter关注按钮?

javascript - react-router-redux 将历史传递给中间件