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

Posted

技术标签:

【中文标题】带有 Ext JS 的 MVC 架构中 store.load() 的动态代理 URL【英文标题】:Dynamic Proxy URL for store.load() in MVC architecture with Ext JS 【发布时间】:2011-11-06 07:07:18 【问题描述】:

我想在加载之前(!)更改商店的代理。这种情况下的具体问题是我没有找到合适的时间,什么时候加载。

详细说明:

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

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

当我使用“autoload:true”加载存储时,一切正常,但代理当然是代码中定义的静态。当我不使用“自动加载”并尝试设置“extraParams”并在我的视图的“initComponent”中加载存储时:

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

我收到一个错误:对象“MyStore”没有方法“加载”。

我该怎么做?

【问题讨论】:

你确定不是语法错误... this.store.load(); 是的,确实如此。已更正。 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

附加问题:我应该在哪里以及如何影响“extraParams”。我不能在视图本身中执行此操作(即在 store.load 之前),因为只有实现视图的组件(及其存储)知道细节。 @heinob,这取决于具体情况。在什么情况下应该更改 extraParams? 我有一个标签面板。网格面板 (MyView) 被添加为新选项卡。网格的内容(通过代理加载的存储)取决于视图之外的情况,但由添加选项卡/视图的函数知道。 @heinob,我认为最好的地方是添加选项卡/视图的功能。如果此功能在控制器中,您可以通过控制器的存储获取器访问您的存储。菲如果您的商店名为“MyStore”,您可以通过this.getMyStoreStore() 访问它。

以上是关于带有 Ext JS 的 MVC 架构中 store.load() 的动态代理 URL的主要内容,如果未能解决你的问题,请参考以下文章

ExtJS 4(MVC)商店不使用我的自定义模型类

ext.js的mvc

EXT JS MVC开发模式

在 Ext JS 4 中通过 store.sync() 更新记录后,记录翻倍

带有表单 cals servlet 的 Ext.js 4 窗口返回 JSON 但无法填充网格面板

请问如何执行Ext JS Store数据源更新