【问题标题】:ExtJs remote (list) filter resetExtJs 远程(列表)过滤器重置
【发布时间】:2018-11-05 03:41:47
【问题描述】:

我有一个关于 Extjs 远程过滤器的问题,我希望你能帮助澄清一下。

我创建了一个带有远程过滤器的网格,效果很好,但是如果我更新网格信息,过滤器会保留以前加载的数据。

我已经尝试了所有方法:store.doDestroystore.removeAll,甚至使用 Ex.create 为 var 分配一个新商店 ,但我没有成功。

我创建了一个Fiddle 来尝试重现我的问题:

  1. 首先加载默认信息(辛普森一家)
  2. 然后打开“爱好”过滤器(模拟选择不同的)。你会得到爵士乐、滑板、啤酒和针织
  3. 之后,更新网格数据(切换到 Van Houtens)
  4. 最后,尝试获得 Van Houtens 的爱好(Videogames、Margaritas and None),但你获得了 Simpsons Hobbies(Jazz、Skate..),因为过滤器是之前加载的。 (注意没有加载掩码)。
  5. 现在重新开始测试跳过第 2 步(和第 5 步以避免无限循环 XD)并注意正确的爱好是如何显示的。

我需要“重置”之前的商店加载。

注意事项:

  • 如果我只是做一个store.load,会触发请求,但返回的值不会绑定到过滤器列表。
  • 如果尝试使用此 bind:{store:'{filterStore}'} 绑定商店,则会发生注释

【问题讨论】:

  • 从小提琴,我看不出你被困在哪里了。
  • 目前还不清楚是什么问题。你所说的“尝试得到”是什么意思?
  • 不清楚您要达到的目标。如果您看到this screenshot,我看不出您试图只为一个家庭加载过滤器。 “辛普森家族的过滤器”是hair.json 的整个列表,这就是为什么总是显示这些。请详细说明。
  • 感谢您的回答。我对Fiddle 做了一些更新。现在的头发颜色过滤器应该基于家庭过滤器。请注意,如果 Grid 内容已更新,该过滤器如何未被清除(或者至少我不知道如何清除)。提前致谢!

标签: extjs


【解决方案1】:

您只需要像这样“重新绑定”每一列的过滤器:

var grid = this.up('grid');

//Clear the current filters before changing
grid.getPlugins()[0].clearFilters();

var store = grid.getStore();
setStoreFilter(store, 'Van Houten');

//Setting the store filters is not enough    
setStoreFilter(filterStore, 'Van Houten');
setStoreFilter(hobbiesStore, 'Van Houten');

//You need to "rebind" the store, it needs a little delay to work properly
setTimeout(function(){ grid.getColumns()[3].filter.bindMenuStore(hobbiesStore); }, 1000);

这是更新后的FIDDLE

【讨论】:

    猜你喜欢
    • 2011-07-15
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多