我正在尝试使用knockoutjs注册多个组件,但来自同一应用程序中的不同上下文,这会导致“错误:您无法将绑定(bind)多次应用于同一元素。”
我尝试做的是从多个地方调用它。
knockout.components.register('a-name', {
viewModel: AViewModel,
template: { require: 'text!ui/views/a-view.html' }
});
knockout.applyBindings();
如果我将所有组件注册到一个地方并进行一次 applyBindings() ,这就会起作用。但另一方面,这给我带来了许多其他问题。因为我希望我注册的每个组件都彼此独立。
那么我可以在应用程序的不同部分注册组件吗?
编辑:找到这个答案:Knockout: Error: You cannot apply bindings multiple times to the same element when refreshing page
这表明每个 DOM 元素只能调用 ko.applyBindings() 一次。我不明白这一点,而且他们的文档非常少。使用knockout时是否有另一种方法可以在需要时注入(inject)html?
最佳答案
can I register components in separate parts of the app?
不,据我所知你不能。注册已在调用 applyBindings
之前完成。
这并不直接暗示组件必须相互依赖。您需要整个应用程序的组合根(或者每个 applyBindings
调用/应用程序 DOM 区域至少有一个)并在那里注册所有组件。组件本身不需要彼此了解,更不用说。
请注意,这仅涉及注册组件。您仍然可以拥有asynchronous loading根据实际组件的需求。
关于javascript - Knockout.js 在不同上下文中注册多个组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36007090/