防止Knockout缓存加载的组件

时间:2016-11-02 16:22:11

标签: javascript knockout.js

documentation说:

  

可以查询多个组件加载器,直到第一个   识别组件名称并提供视图模型/模板。这个   因为Knockout,每个组件类型只发生一次进程   将结果定义缓存在内存中。

问题是我不想只为组件加载一次模板,每次在列表中添加组件时都需要这样做。如何阻止 Knockout 仅加载组件一次?

2 个答案:

答案 0 :(得分:1)

您可以使用ko.components.clearCachedDefinition函数,该函数接受组件名称。此函数清除缓存的组件定义。

作为第一个选项,您可以在组件viewmodel构造函数中调用此缓存清除,例如,以便仅对该组件应用此逻辑。

作为第二种选择,如果您需要全局逻辑,则可以尝试来替换原始的ko.components.get函数。请注意,这是一种黑客行为,您应该使用缩小版本对其进行测试,因为行为可能会有所不同。

ko.components.get = (function(fn) {
  return function(componentName, callback) {
    ko.components.clearCachedDefinition(componentName);
    fn(componentName, callback);
  };
})(ko.components.get);

另请注意,我没有以任何方式测试此片段,使用此技术需要您自担风险。

答案 1 :(得分:1)

如果您想清除所有已注册的组件缓存,则可以使用此肮脏的技巧:

Object.getOwnPropertyNames(ko.components._allRegisteredComponents).forEach(ko.components.clearCachedDefinition);