Javascript js在不同的上下文中注册多个组件
我正在尝试使用knockoutjs注册多个组件,但来自同一应用程序中的不同上下文,这会导致“错误:您不能对同一元素多次应用绑定。” 我试着从多个地方调用它Javascript js在不同的上下文中注册多个组件,javascript,knockout.js,Javascript,Knockout.js,我正在尝试使用knockoutjs注册多个组件,但来自同一应用程序中的不同上下文,这会导致“错误:您不能对同一元素多次应用绑定。” 我试着从多个地方调用它 knockout.components.register('a-name', { viewModel: AViewModel, template: { require: 'text!ui/views/a-view.html' } }); knockout.applyBindings(); 如果我在一个地方注册所有组件并生成
knockout.components.register('a-name', {
viewModel: AViewModel,
template: { require: 'text!ui/views/a-view.html' }
});
knockout.applyBindings();
如果我在一个地方注册所有组件并生成applyBindings()一次,那么这就行了。但另一方面,这给我带来了许多其他问题。因为我希望我注册的每个组件彼此独立
那么我可以在应用程序的不同部分注册组件吗
编辑:找到此答案:
声明每个DOM元素只能调用一次ko.applyBindings()。我不明白这一点,而且他们的文档非常少。在使用knockout时,是否有其他方法在需要时注入html?为什么不在业务逻辑中编写一个全局寄存器函数: 伪代码
function registerAname()
{
if( knockout.components.contains('a-name'))
return;
knockout.components.register('a-name', {
viewModel: AViewModel,
template: { require: 'text!ui/views/a-view.html' }
});
knockout.applyBindings();
}
c类:
注册表名()
x类:注册表名()
我可以在应用程序的不同部分注册组件吗
不,恐怕你不能。在调用applyBindings
之前已完成注册
这并不直接意味着组件必须相互依赖。您需要整个应用程序的合成根目录(或者每个applyBindings
call/appdom区域至少一个),并在那里注册所有组件。组件本身不需要相互了解,不用说
请注意,这只是关于注册组件。您仍然可以按需使用实际组件。这是伪代码检查是否存在类似contains方法的内容实际上检查组件是否已注册的方法如下:if(knockout.components.isRegistered('a-name'))return;