Javascript Ext.form组合框不';除非先单击,否则无法填充

Javascript Ext.form组合框不';除非先单击,否则无法填充,javascript,extjs,combobox,store,Javascript,Extjs,Combobox,Store,我有一个下拉列表,它获取ID列表,其选择决定了第二个下拉列表应该获取哪个列表。问题是,除非我先单击(空)第二个下拉列表,否则在第一个下拉列表中选择一个选项后,它将不会填充。但是,一旦执行了此“变通方法”,则在第一个下拉列表中选择选项时,第二个下拉列表总是正确填充,这是预期的功能(而不是最初的古怪) 抱歉,如果这让人困惑,以下是我的代码: var restaurantInput = { createInput: function(parentObject, inputClassNa

我有一个下拉列表,它获取ID列表,其选择决定了第二个下拉列表应该获取哪个列表。问题是,除非我先单击(空)第二个下拉列表,否则在第一个下拉列表中选择一个选项后,它将不会填充。但是,一旦执行了此“变通方法”,则在第一个下拉列表中选择选项时,第二个下拉列表总是正确填充,这是预期的功能(而不是最初的古怪)

抱歉,如果这让人困惑,以下是我的代码:

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