很多开发者困惑于 Ext JS 中 Store 的 load() 与 reload() 方法究竟有何区别。从源码角度分析,reload() 本质就是调用 load(),但它会自动复用上一次请求的配置参数。
查看 reload() 的实现,它会先将上一次请求的配置选项(lastOptions)合并,然后再次调用 load() 方法。这意味着:如果你使用 reload() 刷新数据,它不会理会你新传入的参数,而是完全按照之前的参数重新发起请求。

复制代码 代码如下:
reload : function(options){ this.load(Ext.applyIf(options||{}, this.lastOptions)); },
再来看 load() 方法本身,它接收一个配置对象,然后调用 storeOptions() 处理参数。如果开启了远程排序(remoteSort)并且存在排序信息,还会自动将排序字段和排序方向拼接到请求参数中。最终通过 execute() 方法调用 Proxy 发起请求。
复制代码 代码如下:
load : function(options) { options = Ext.apply({}, options); this.storeOptions(options); if(this.sortInfo && this.remoteSort){ var pn = this.paramNames; options.params = Ext.apply({}, options.params); options.params[pn.sort] = this.sortInfo.field; options.params[pn.dir] = this.sortInfo.direction; } try { return this.execute('read', null, options); // <-- null represents rs. No rs for load actions. } catch(e) { this.handleException(e); return false; } },
Store 中 load() 与 reload() 的核心区别可以用一句话概括:load() 会带着你新传入的参数去请求数据,而 reload() 则沿用上一次的参数再请求一遍。用一个贴切的比喻:快递员送货时,如果你重新填写了地址,那就是 load();如果只是催他再送一次,他拿到的仍是上次填的地址,那就是 reload()。
因此在实际开发中,如果需要根据当前条件刷新数据,请使用 load() 并传入最新的参数;如果只想重新拉取一遍之前的数据,或者用于定时刷新,使用 reload() 会更加便捷。但需特别注意:reload() 会把上次的参数原封不动再次提交,包括分页信息、筛选条件等。如果中途改变了排序条件或查询条件,却忘记更新参数,直接调用 reload() 就会导致数据对不上的问题。
