2013-06-12 4 views
0

Я использую вырезки Ext JS в JSP. При первой загрузке страницы поле combox не отображается. Я вижу ошибку в моей консоли Firebug, что связанное хранилище не определено. (TypeError: cpStore is undefined)Ext JS Combobox не загружается с первого раза

Я заметил, однако, что следующие запросы работают нормально.

Пожалуйста, предложите, что я мог сделать, чтобы избежать этой проблемы.

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(); 

ответ

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

} 
+0

Я переписал свой код, устанавливающий значение при загрузке, и теперь он работает нормально. Большое спасибо. – user2478960

Смежные вопросы