Extjs 使用Ext JS的MVC体系结构中store.load()的动态代理URL

Extjs 使用Ext JS的MVC体系结构中store.load()的动态代理URL,extjs,proxy,extjs4,Extjs,Proxy,Extjs4,我想在加载(!)之前更改存储的代理。在这种情况下的具体问题是,我没有找到正确的时刻,何时加载 详细内容: 我通过创建视图、控制器、模型和由EXTJS4体系结构定义的存储来创建MVC模型。该视图是一个栅格面板。它在自己的define语句中定义存储: Ext.define('P.view.MyView' ,{ extend: 'Ext.grid.Panel', alias : 'widget.MyView', ... store: 'MyStore', ...

我想在加载(!)之前更改存储的代理。在这种情况下的具体问题是,我没有找到正确的时刻,何时加载

详细内容:

我通过创建视图、控制器、模型和由EXTJS4体系结构定义的存储来创建MVC模型。该视图是一个栅格面板。它在自己的define语句中定义存储:

Ext.define('P.view.MyView' ,{
    extend: 'Ext.grid.Panel',
    alias : 'widget.MyView',
    ...
    store: 'MyStore',
    ...
}
当我用“autoload:true”加载存储时,一切正常,但当然,代理是静态的,正如代码中定义的那样。当我不使用“自动加载”并尝试设置“extraParams”并在视图的“initComponent”中加载存储时,如下所示:

initComponent: function() {
    ...
    this.store.load();    
    ....
我得到一个错误:对象“MyStore”没有方法“load”


我应该怎么做?

在initComponent中调用
this.store.load()
时,存储尚未初始化。调用时,属性this.store是字符串。您必须在调用小部件的父级
initComponent
(正在进行存储初始化)后调用加载:

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

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

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

正如您所见,您还可以影响存储和代理设置。这有助于重复使用类似网格的存储。

您确定这不是语法错误。。。this.store.load();是的,一直是这样。补充问题:我应该在哪里以及如何影响“外部参数”。我不能在视图本身内(即在store.load之前)执行此操作,因为只有实现视图的组件(及其存储)知道详细信息。@heinob,这取决于具体情况。在什么情况下应该更改extraParams?我有一个选项卡面板。gridpanel(MyView)作为新选项卡添加。网格的内容(通过代理加载的存储)取决于视图之外的环境,但添加选项卡/视图的函数知道这些内容。@heinob,我认为最好的位置是添加选项卡/视图的函数。若此函数位于控制器中,则可以通过控制器的存储获取程序访问存储。F.i.如果您的存储名为“MyStore”,您可以通过
this.getMyStoreStore()
访问它。