我在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();
答案 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) {
}