防止Knockout缓存加载的组件
Prevent Knockout from caching loaded components
文档中说:
可以参考多个组件加载器,直到第一个识别组件名称并提供视图模型/模板。这由于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);
还请注意,我没有以任何方式测试此代码片段,使用此技术的风险由您自己承担。
如果你想清除所有已注册的组件缓存,你可以使用这个肮脏的hack:
Object.getOwnPropertyNames(ko.components._allRegisteredComponents).forEach(ko.components.clearCachedDefinition);
相关文章:
- 如何创建带有插槽的vue js组件预加载程序
- 加载器组件仅加载一次
- 如何在ReactJs中渲染子组件时重新加载子组件的数据
- 加载服务器端渲染的React组件后执行脚本
- 在reactjs组件中预加载数据
- 在foreach中加载所有项后,Knockoutjs组件回调
- ReactJS-在加载时渲染顶级组件
- 可以't在我的React组件中加载图像
- 使用javascript加载knockoutjs组件
- 将自定义脚本加载到Vue.js组件中
- 如何在加载Angular2.RC1子组件时更新它
- Angular2 - 动态组件加载器错误
- 使用*ngIf+模板变量+loadIntoLocation以编程方式将组件加载到视图中
- 反应组件加载问题
- 反应组件加载模式(或反模式?
- Ember组件加载存储数据
- noflo:动态组件加载-组件[name]与基础[path]不可用
- 在angular组件加载时附加jQuery事件
- KnockoutJS 自定义组件加载器未执行“loadViewModel”
- 在 Angular2 中使用动态组件加载器的双向数据绑定