如何禁用dojox/data/JsonRestStore缓存?解决Dojo树数据更新失效问题
解决dojox/data/JsonRestStore缓存及Dojo树更新不生效问题
嘿,针对你遇到的这两个关联问题,我给你整理了实用的解决方案:
1. 全局禁用JsonRestStore缓存
dojox/data/JsonRestStore默认会缓存请求返回的数据,你只需要在创建Store时添加cacheResults: false配置项,就能从根源上禁用缓存:
this.store = new dojox.data.JsonRestStore({ target: 'jtf-products-REST.php', labelAttribute: "name", cacheResults: false // 核心配置:禁用本地缓存 });
添加这个配置后,每次请求都会直接从服务器拉取最新数据,完全不会依赖本地缓存的旧内容。
2. 针对树数据更新的缓存处理(临时清除+节点刷新)
如果不想全局禁用缓存,只是在修改项名称后让树显示最新内容,可以结合手动清除缓存和树节点刷新的方式:
// 假设你已经完成了后端数据更新,执行以下步骤: // 1. 清除Store的缓存 prod.store.clearCache(); // 2. 刷新树中对应的节点(如果知道具体节点) const targetItem = // 找到你修改的那个树节点对应的item prod.tree.refreshNode(targetItem); // 如果不确定具体节点,也可以刷新根节点下的所有子节点 prod.model.root.children.forEach(child => { prod.tree.refreshNode(child); });
另外,如果你是通过Store的API直接更新数据(比如put()方法),可以在操作完成后链式处理缓存和树刷新:
const updatedItem = { id: "xxx", name: "新名称" }; prod.store.put(updatedItem, { overwrite: true }).then(() => { prod.store.clearCache(); prod.tree.refreshNode(updatedItem); });
你的ForestStoreModel设置deferItemLoadingUntilExpand: true是合理的,它只会在展开节点时加载数据,配合缓存禁用/清除操作,就能保证每次展开节点都能拿到最新的名称。
内容的提问来源于stack exchange,提问作者Paul Ghobril
相关产品推荐
相关产品推荐

