Ext JS Combobox第一次没有加载

时间:2013-06-12 15:44:38

标签: combobox extjs4

我在JSP中使用Ext JS组合框。我第一次加载页面时,不会显示combox框。  我在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();

1 个答案:

答案 0 :(得分:0)

如果你有范围问题我觉得你儿子不好......

您应该将范围作为参数传递给函数

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) {

}