在实现的时候遇到一个问题,在异步获取Grid数据的时候,想用filter来筛选数据,不用全部显示。那起初我是这样做的:
这样做的结果就是,无论如何都没法筛选StationName字段中有包河的row,后来尝试了filterBy也是不行,数据明明都正确的获得了,也能全显示,但是筛选未果。然后我在filter后面加了LeftGridStore.isFiltered()测试,也能报true,但就是无法筛选。
通过一番查找,终于知道了,这个jsonstore的load是异步的传输,当代码执行filter的时候,上面load的数据可能还没有到位,这时候你filter是没有用的。怎么解决呢?当然你可以通过事件来触发了,就是当load加载完的时候再调用filter就可以了。
那由上面的需求我们可以得到几种方法,可以给filter加延迟,不过这种方法不好,很低效。还有就是给store加一个on:load的事件响应,这个时候就会在load执行完后调用此方法。当然还有一种最简单的方法就是在上面代码的load中,附加callback属性,然后在function中实现filter,就可以完美的达到load结束以后调用filter筛选,因为callback正是load成功返回后的回调函数,满足我们的需要。
但是我们会发现,alert提示的结果是undefined,也就是没有被筛选,原因很简单,因为load异步操作,执行alert的时候,上面的load并没有完成。。perfect!
原文链接:https://www.f2er.com/json/290802.html