使用javascript加载knockoutjs组件

时间:2015-03-31 11:11:22

标签: javascript knockout.js components

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

1 个答案:

答案 0 :(得分:0)

我相信你要找的是函数ko.components.get(componentName,callback)。此方法的作用是要求组件加载器解析组件名称,直到找到组件名称。如果它没有找到,它将调用callback(null)。如果它做得很好,它将调用callback(componentDefinition),其中componentDefinition是用于注册组件的对象,如{viewmodel:...,template:...}。

据我所知,还没有一个现成的功能可以返回一个"工作"零件。获取componentDefinition对象后您需要做的是:

  1. 将模板转换为DOM元素
  2. 实例化viewmodel(如果已定义)
  3. 将viewmodel绑定到DOM元素
  4. 请注意,这不是直接的,因为模板和视图模型可以通过多种方式定义。 我建议查看https://github.com/knockout/knockout/blob/master/src/components/componentBinding.js,看看它是如何在这里完成的(从第38行开始)。

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