【问题标题】:Ext JS Combobox not loading first timeExt JS Combobox第一次没有加载
【发布时间】:2013-06-13 01:44:56
【问题描述】:

我在 JSP 中使用 Ext JS 组合框。第一次加载页面时,没有显示组合框。 我在 Firebug 控制台中看到未定义关联存储的错误。 (TypeError: cpStore is undefined)

但是,我注意到下一个请求可以正常工作。

请建议我可以做些什么来避免这个问题。

function displayCPBox(idPrefix){

    var cpSelectList = Ext.create ('Ext.data.JsonStore', {
        storeId: idPrefix+'cpSelectStore',
        remoteSort: true,
        autoLoad: true,
        proxy: {
            type: 'ajax',
            url: proyecto + 'extjs/data/cpData.jsp',
            reader: {
                type: 'json',
                root: 'data',
                idProperty: 'id'
            }
        },
        fields: [
            {name:'id', type: 'float'},
            {name:'codigo', type: 'string'}
        ]

    });

    var multiCombo = Ext.create('Ext.form.field.ComboBox', {
        fieldLabel: 'CP',
        renderTo: idPrefix+'cpSelectCombo',
        id: idPrefix + 'cpSelectComboBox',
        displayField: 'codigo',
        valueField : 'id',
        width: 200,
        labelWidth: 50,
        store: cpSelectList,
        queryMode: 'remote',
        minChars: 1,
        cls : 'cp-margin',
        listeners :{
            select: function( combo, records, eOpts ){
                getZipInfoForCodigoFormFields(records,document.getElementById(idPrefix+'localidad')  ,document.getElementById(idPrefix+'provincia'),document.getElementById(idPrefix+'pais'),doc           ument.getElementById(idPrefix+'zona'));
            }
        }
    });

}

加载时设置值的代码:

var cpStore = Ext.data.StoreManager.lookup('<%=idPrefix%>'+'cpSelectStore');
cpStore.on('load',function() {
    <%
        Long zipCodeForDisplayLong =  oportunidad.getId_lib_cp();
        long zipCodeForDisplay =   (zipCodeForDisplayLong == null) ? -1 : zipCodeForDisplayLong.longValue();
    %>
    var selectedzipCodeValue=  <%=zipCodeForDisplay %>;
    if(selectedzipCodeValue != -1)
    {
        var selectedCPVal =  cpStore.findRecord("id",selectedzipCodeValue);
        Ext.getCmp('<%=idPrefix%>'+'cpSelectComboBox').setValue(selectedCPVal.get("id"));
    }
});

cpStore.load();

【问题讨论】:

    标签: combobox extjs4


    【解决方案1】:

    如果你有范围问题,我会为你感到难过,儿子......

    你应该将作用域作为参数传递给函数

    cpStore.on('load', function(cpStore), this {
      ...cpStore.findRecord()
    });
    

    现在 cpStore 是您的商店参考。


    我确实觉得你当时为商店设置监听器有点奇怪。不确定您实际在哪里创建商店,但我觉得这可能更干净:

    var cpStore = Ext.create('Path.to.store.class');
    cpStore.on({
        load: this.onCpStoreLoad,
        scope: this
    });
    
    onCpStoreLoad: function(cpStore) {
    
    }
    

    【讨论】:

    • 我重写了设置加载值的代码,现在它工作正常。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多