可以查询多个组件加载器,直到第一个 识别组件名称并提供视图模型/模板。这个 因为Knockout,每个组件类型只发生一次进程 将结果定义缓存在内存中。
问题是我不想只为组件加载一次模板,每次在列表中添加组件时都需要这样做。如何阻止 Knockout 仅加载组件一次?
答案 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);