Javascript Ext.form组合框不';除非先单击,否则无法填充
我有一个下拉列表,它获取ID列表,其选择决定了第二个下拉列表应该获取哪个列表。问题是,除非我先单击(空)第二个下拉列表,否则在第一个下拉列表中选择一个选项后,它将不会填充。但是,一旦执行了此“变通方法”,则在第一个下拉列表中选择选项时,第二个下拉列表总是正确填充,这是预期的功能(而不是最初的古怪) 抱歉,如果这让人困惑,以下是我的代码:Javascript Ext.form组合框不';除非先单击,否则无法填充,javascript,extjs,combobox,store,Javascript,Extjs,Combobox,Store,我有一个下拉列表,它获取ID列表,其选择决定了第二个下拉列表应该获取哪个列表。问题是,除非我先单击(空)第二个下拉列表,否则在第一个下拉列表中选择一个选项后,它将不会填充。但是,一旦执行了此“变通方法”,则在第一个下拉列表中选择选项时,第二个下拉列表总是正确填充,这是预期的功能(而不是最初的古怪) 抱歉,如果这让人困惑,以下是我的代码: var restaurantInput = { createInput: function(parentObject, inputClassNa
var restaurantInput =
{
createInput: function(parentObject, inputClassName, value, propertyObject)
{
var restaurantList = [];
$.ajax({
type: "GET",
url: "http://mysite.com/restaurants/",
success: function(response)
{
var results = (typeof response === 'string' ) ? JSON.parse(response) : response;
for (i in results.restaurants){
restaurantList.push({restaurantID: results.restaurants[i].restaurant_id.toString(), restaurantname: results.restaurants[i].name});
}
}
}).done(function(){
var restaurantCombo = Ext.create("Ext.form.field.ComboBox",
{
store:
{
filterOnLoad: false,
sortOnLoad: false,
fields: ["restaurantID", "restaurantname"],
data: restaurantList
},
name: "restaurantName",
id: "restaurantName",
displayField: "restaurantname",
valueField: "restaurantID",
listeners: {
'select':function(){
updateMenuList(Ext.getCmp("restaurantName").getValue());
}
}
});
var str = '<div id="restaurantComboDiv"></div>';
parentObject.html(str);
restaurantCombo.setValue(value);
restaurantCombo.render("restaurantComboDiv");
});
}
};
var restaurantInput=
{
createInput:函数(parentObject、inputClassName、value、propertyObject)
{
var restaurantList=[];
$.ajax({
键入:“获取”,
url:“http://mysite.com/restaurants/",
成功:功能(响应)
{
var results=(typeof response=='string')?JSON.parse(response):response;
对于(我在结果中。餐厅){
push({restaurantID:results.restaurants[i].restaurant_id.toString(),restaurantname:results.restaurants[i].name});
}
}
}).done(函数(){
var restaurantCombo=Ext.create(“Ext.form.field.ComboBox”,
{
商店:
{
filterOnLoad:false,
sortOnLoad:false,
字段:[“restaurantID”、“restaurantname”],
数据来源:restaurantList
},
名称:“restaurantName”,
id:“restaurantName”,
显示字段:“restaurantname”,
valueField:“restaurantID”,
听众:{
“选择”:函数(){
更新列表(Ext.getCmp(“restaurantName”).getValue();
}
}
});
var-str='';
parentObject.html(str);
restaurantCombo.setValue(值);
restaurantCombo.render(“restaurantComboDiv”);
});
}
};
var menuCombo=Ext.create(“Ext.form.field.ComboBox”,
{
商店:
{
filterOnLoad:false,
sortOnLoad:false,
字段:[“menuID”、“menuname”],
数据:[]
},
名称:“梅努梅”,
id:“Menuame”,
显示字段:“菜单名”,
valueField:“menuID”,
多选:正确
});
var menuInput=
{
createInput:函数(parentObject、inputClassName、value、propertyObject)
{
var-str='';
parentObject.html(str);
menuCombo.setValue(值);
menuCombo.render(“menuComboDiv”);
}
};
函数更新列表(RID)
{
变量menuList=[];
$.ajax({
键入:“获取”,
url:“http://mysite.com/restaurants/“+RID,
成功:功能(响应)
{
var results=(typeof response=='string')?JSON.parse(response):response;
变量i=0,len=0;
对于(i=0,len=results.menu.length;i找到了问题的答案(问题与您完全相同),请将queryMode设置为local
comboBox.queryMode='local'
(参考资料:)
希望这有帮助!找到了我的问题的答案(与您的问题完全相同),将queryMode设置为local
comboBox.queryMode='local'
(参考资料:)
希望这有帮助!updateSeriesList vs.updateMenuList?//你的代码看起来很难看。哦,没有替换那一个。在我的工作代码中,它都是“系列”,我在这里将其重命名为“菜单”,以帮助解释其预期用途。每次都会成功调用更新函数。你知道为什么会发生这种情况吗?或者它对你来说很好?或者只是如何使用c精简我的代码?updateSeriesList vs.updateMenuList?//你的代码看起来很难看。哦,没有替换那一个。它在我的工作代码中都是“系列”,我在这里将其重命名为“菜单”,以帮助解释其预期用途。每次都会成功调用更新函数。你知道为什么会发生这种情况吗?或者它对你来说很好?或者仅仅是如何使用它这听起来像是相反的问题(我的组合框在第二次++点击时打开,但不是第一次),但它解决了我的问题。谢谢链接!这听起来像是相反的问题(我的组合框在第二次++点击时打开,但不是第一次),但它解决了我的问题。谢谢链接!
var menuCombo = Ext.create("Ext.form.field.ComboBox",
{
store:
{
filterOnLoad: false,
sortOnLoad: false,
fields: ["menuID", "menuname"],
data: []
},
name: "menuName",
id: "menuName",
displayField: "menuname",
valueField: "menuID",
multiSelect: true
});
var menuInput =
{
createInput: function(parentObject, inputClassName, value, propertyObject)
{
var str = '<div id="menuComboDiv"></div>';
parentObject.html(str);
menuCombo.setValue(value);
menuCombo.render("menuComboDiv");
}
};
function updateMenuList(RID)
{
var menuList = [];
$.ajax({
type: "GET",
url: "http://mysite.com/restaurants/"+RID,
success: function(response)
{
var results = (typeof response === 'string' ) ? JSON.parse(response) : response;
var i=0, len=0;
for (i=0, len=results.menu.length; i<len; i++)
{
menuList.push({menuID: results.menu[i].menu_id, menuname: results.menu[i].name});
}
}
}).done(function(){
menuCombo.setValue("");
menuCombo.store.removeAll();
menuCombo.store.add(menuList);
menuCombo.bindStore(menuCombo.store);
});
}