无法在 ExtJS4 中加载组合存储

Posted

技术标签:

【中文标题】无法在 ExtJS4 中加载组合存储【英文标题】:Can´t load store of a combo in ExtJS4 【发布时间】:2016-02-10 11:16:58 【问题描述】:

加载视图时,我无法加载商店数据。 这是我的商店: (strEstadosMtoOrganismos.js)

Ext.define('TelicitaApp.store.filtros.strEstadosMtoOrganismos', 
extend: 'Ext.data.Store',
model:  'TelicitaApp.model.filtros.mdlEstadosMtoOrganismos',
autoLoad: false,
proxy: 
    type: 'ajax',
    api: read: './data/php/filtros/Tmc_EstadosMtoOrganismos.php?despliegue='+TelicitaApp.Settings.despliegue,
    reader: 
                type: 'json',
                root: 'data',
                totalProperty: 'total',
                successProperty: 'success'
    

);

这是我的看法: (viewGridMtoOrganismos.js)

Ext.define('TelicitaApp.view.mantenimientos.organismos.viewGridMtoOrganismos', 
extend: 'Ext.grid.Panel',
alias: 'widget.viewGridMtoOrganismos',
requires: [
],
initComponent: function() 
    var toolbar1 = 
            xtype : 'toolbar',
            dock : 'top',
            items: [
                    
                        iconCls:'limpiar-icon', text:'Limpiar', handler:  function()    ,
                    ,
                    '->',
                    
                        iconCls:'refresh', text:'Recargar', handler:  function()    ,
                    
            ]
    ;

    var toolbar2 = 
            xtype: 'toolbar',
            dock: 'top',
            items: [
                    text:'<span style="color:#C85E00;">Estado</span>',
                    
                        xtype: 'combo',
                        value: 'Todos',
                        queryMode: 'remote',
                        triggerAction: 'all',
                        editable: false,
                        displayField: 'label',
                        valueField: 'value',
                        store: 'filtros.strEstadosMtoOrganismos'
                    
            ]
       

    Ext.apply(this, 
        frame: true,
        bodyPadding: '5 5 0',
        fieldDefaults: 
            labelAlign: 'top',
            msgTarget: 'side'
        ,
        forceFit: true,
        height: 300,
        stripeRows: true,
        loadMask: true,
        tbar: 
            xtype: 'container',
            layout: 'anchor',
            defaults: anchor: '0',
            defaultType: 'toolbar',
            items: [
                    toolbar1,toolbar2
            ]           
        ,
        columns: [
                  header:'<span style="color:blue;">Id</span>', xtype: 'numbercolumn',format:'0',  width:35, sortable: true,
        ]
    );
    this.callParent(arguments);

);

这是我的控制器: (ctrlMtoOrganismos.js)

Ext.define('TelicitaApp.controller.ctrlMtoOrganismos', 
extend: 'Ext.app.Controller',
models:[
        'mantenimientos.organismos.mdlMtoOrganismos',
        'filtros.mdlEstadosMtoOrganismos'

],
stores:[
        'mantenimientos.organismos.strMtoOrganismos',
        'filtros.strEstadosMtoOrganismos'
],
views: [ 
        'mantenimientos.organismos.viewModuloMtoOrganismos'
],
refs: [
],
init: function() 
    this.control(

    );
,
onLaunch: function() 

,
);

如果我将 store 中的 autoload 属性设置为 true,它会在应用启动时加载数据。但我想在加载视图时加载数据。 加载视图后,如果我展开组合,它将启动 php 文件以填充组合,但我希望它在加载视图后自动加载数据,而不是在展开组合时。

【问题讨论】:

【参考方案1】:

替换

    this.callParent(arguments);

    this.callParent(arguments);
    this.down('combo').getStore().load();

你可以走了。

【讨论】:

它有效,现在有两件事:1. 如果我有更多组合,使用 this.down('combo').getStore().load();加载所有组合的商店? 2. 展开combo时如何避免再次启动填充store的php? 1.不,down 会给你第一个。您可以迭代 query 来加载所有这些。 2.如果设置queryMode:'local',则combo在打开菜单时不会触发store load。 还有什么更好,在视图中或控制器中加载商店?

以上是关于无法在 ExtJS4 中加载组合存储的主要内容,如果未能解决你的问题,请参考以下文章

EXTJS4 中的链接组合框

ExtJS 4.2 将网格数据导出到可下载的 CSV 文件

ExtJS 4 - 在 MVC 架构中重用组件

无法从gridpanel extjs4 MVC中的存储加载数据

如何在 extjs4.1 中水平对齐组合框

ExtJS4:如何在文本框、组合框等旁边显示验证错误消息