【发布时间】:2020-05-06 17:20:33
【问题描述】:
可以咨询多个组件加载器,直到第一个 识别组件名称并提供视图模型/模板。这个 每个组件类型只发生一次过程,因为 Knockout 将结果定义缓存在内存中。
问题是我不想只为组件加载模板一次,我每次在列表中添加组件时都需要这样做。如何防止 Knockout 只加载一次组件?
【问题讨论】:
可以咨询多个组件加载器,直到第一个 识别组件名称并提供视图模型/模板。这个 每个组件类型只发生一次过程,因为 Knockout 将结果定义缓存在内存中。
问题是我不想只为组件加载模板一次,我每次在列表中添加组件时都需要这样做。如何防止 Knockout 只加载一次组件?
【问题讨论】:
您可以使用ko.components.clearCachedDefinition 函数,该函数接受组件名称。该函数清除缓存的组件定义。
作为第一个选项,例如,您可以在组件视图模型构造函数中调用此缓存清除,以便仅将此逻辑应用于该组件。
作为第二种选择,如果你需要全局这个逻辑,你可以尝试像这样替换原来的ko.components.get函数。请注意,这是一种 hack,您也应该使用缩小版本对其进行测试,因为行为可能会有所不同。
ko.components.get = (function(fn) {
return function(componentName, callback) {
ko.components.clearCachedDefinition(componentName);
fn(componentName, callback);
};
})(ko.components.get);
另外请注意,我没有以任何方式测试此 sn-p,使用此技术需要您自担风险。
【讨论】:
如果你想清除所有注册的组件缓存,你可以使用这个肮脏的黑客:
Object.getOwnPropertyNames(ko.components._allRegisteredComponents).forEach(ko.components.clearCachedDefinition);
【讨论】: