使用javascript加载knockoutjs组件



用JavaScript代码加载ko组件而不是在html中定义自定义元素的最佳方法是什么?我尝试使用ko.components.defaultLoader.load,但我的组件构造函数没有命中。我仔细检查了一下,组件似乎已注册。

我相信您正在寻找的是函数ko.components.get(componentName,callback)。该方法的作用是要求组件加载程序解析组件名称,直到找到为止。如果找不到,它将调用callback(null)。如果它做得很好,它将调用回调(componentDefinition),其中componentDefinition是用于注册组件的对象,如{viewmodel:…,template:…}

据我所知,还没有一个现成的函数返回一个"正在工作"的组件。在获得componentDefinition对象后,您必须执行的操作类似于:

  1. 将模板转换为DOM元素
  2. 实例化视图模型(如果已定义)
  3. 将视图模型绑定到DOM元素

请注意,这不是直接的,因为模板和视图模型可以通过多种方式定义。我建议查看https://github.com/knockout/knockout/blob/master/src/components/componentBinding.js看看这里是怎么做的(从第38行开始)。

我希望这对你有用,否则你可以考虑其他选项,比如在代码中动态创建一个带有组件绑定的div元素,其中组件名称和参数绑定到视图模型的属性。然后将这个视图模型绑定到您刚刚创建的div元素。这应该是"仅代码"的工作方式,它比其他路由的代码少得多。

最新更新