javascript - Knockout.js 在不同上下文中注册多个组件

标签 javascript knockout.js

我正在尝试使用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/

相关文章:

knockout.js - 获取对 Knockout valueAccessor 属性名称的访问权限

asp.net-mvc-3 - 如何将 knockoutjs 值绑定(bind)到 MVC 操作链接 (id)

Javascript - 通过引用传递变量问题

javascript - 为什么这个 JS 会触发部分呈现在一页上而不是另一页上的表单?

javascript - 如何使用 RequireJS 加载定义全局并依赖于另一个第三方库的 JS 库?

javascript - 有没有办法一次禁用一堆表单元素?

javascript - knockout 在数组中设置可观察数组

javascript - HTML5/jQuery - 页面滚动到输入值

javascript - React router v4 主动 anchor 链接

javascript - 当 mousedown/mouseup 注册时,双击计时器始终为空