下次用户在 ExtJS6 中与它交互时,如何制作组合以重新加载其商店?

How to make a combo to reload its store the next time a user interacts with it in ExtJS6?

我有一个由 ajax 商店支持的简单组合框。我正在根据表单中的其他字段修改这家商店的 proxy.extraParams

问题是当我修改商店后用户按下向下箭头按钮时,以前的组合选项没有重置,就好像组合不知道它的商店已被更改一样。有没有办法让组合在下次用户与之交互时重新加载其存储?

目前,我每次修改存储参数时都会手动执行 combo.getStore().load(),但这会导致不必要的 ajax 调用。也许用户甚至不会再与该组合框交互,我只想在用户与组合字段交互时重新加载商店。

嗯,你可以看看 ExtJS combo code:

// If they're using the same value as last time (and not being asked to query all), 
// and the filters don't need to be refreshed, just show the dropdown
if (me.queryCaching && !refreshFilters && queryPlan.query === me.lastQuery) {
    // The filter changing was done with events suppressed, so
    // refresh the picker DOM while hidden and it will layout on show.
    me.getPicker().refresh();
    me.expand();
}

// Otherwise filter or load the store
else {
    me.lastQuery = queryPlan.query;

    if (me.queryMode === 'local') {
        me.doLocalQuery(queryPlan);

    } else {
        me.doRemoteQuery(queryPlan);
    }
}

因为 queryCaching:false 如果没有任何更改会导致不必要的调用,我想你最好的选择是 combo.lastQuery = null;.

您可以在每次用户展开组合框时重新加载商店:

listeners: {
        expand: function() {
            this.getStore().load();
        }
    }