带有Ext JS的MVC架构中store.load()的动态代理URL

时间:2011-11-06 07:07:19

标签: extjs proxy extjs4

我希望在(!)加载之前更改商店的代理。这种情况下的具体问题是我找不到合适的时机,何时加载。

详细说明:

我通过创建EXTJS4架构定义的视图,控制器,模型和商店来创建MVC模型。视图是一个网格面板。它在自己的define语句中定义商店:

Ext.define('P.view.MyView' ,{
    extend: 'Ext.grid.Panel',
    alias : 'widget.MyView',
    ...
    store: 'MyStore',
    ...
}

当我使用“autoload:true”加载商店时,一切正常,但当然代理是静态的,如代码中所定义的。当我不使用“autoload”并尝试设置“extraParams”并将商店加载到我的视图的“initComponent”中时:

initComponent: function() {
    ...
    this.store.load();    
    ....

我收到错误:对象“MyStore”没有方法'load'。

我该怎么做?

2 个答案:

答案 0 :(得分:4)

我想补充一点,在最后一刻加载数据的另一种常见方法是使用网格上的afterrender监听器,如下所示:

       listeners: {
             afterrender: function(grid) {
                grid.store.getProxy().url = 'request/my.json'; //modify your URL
                grid.store.load();    
             }
        }

如您所见,您还可以影响商店和代理设置。这有助于重用类似网格的商店。

答案 1 :(得分:3)

当您在initComponent中调用this.store.load()时,商店尚未初始化。属性this.store在调用时是字符串。您必须在调用窗口小部件的父initComponent(发生存储初始化)之后调用加载:

initComponent: function() {
    ...
    this.callParent(arguments);
    this.store.load();    
    ....