2010-06-07 56 views
0

我使用下列组合框:Extjs combobox - doQuery回调?

  var cb = new Ext.form.ComboBox({ 
      store: someDs,    
      fieldLabel: 'test', 
      valueField:'name', 
      displayField:'name_id', 
      typeAhead: true, 
      minChars: 3, 
      triggerAction: 'query' 
     }); 

所以当3个字符输入的用户,查询服务器做出示正确的结果。

现在我尝试以编程方式使用用户输入的方式使用组合框的doQuery()函数。在调用doQuery()方法之后,我想通过setValue()来调用Item。

 cb.doQuery('myval'); 
     cb.setValue('myval'); 

的问题是的setValue()无法选择propper价值,因为它被调用的时候,请求通过doQuery开始()尚未完成。 所以我需要一个像我可以使用setValue()的回调 - 但doQuery()似乎没有回调函数。

有什么想法?谢谢!

+0

嗯,也许这是使用“负荷”的选项 - 分配给组合框的商店事件: someDs.store.on('load',function(){ cb.setValue('myval'); }); cb.doQuery('myval'); 但我不确定这是否是一个优雅的解决方案... – Ben 2010-06-07 14:53:42

+0

这是我正在考虑的选项之一。它按照你想要的方式工作吗? – 2010-06-07 14:59:54

回答

1

我回答自己,因为代码格式不适用于评论。

伊戈尔:它的作品,但它感觉像一个丑陋的黑客,然后一个干净的解决方案。 为了更好地理解我的情况: 我有一个GridPanel。当用户点击此面板上的一行时,我想要预先选择组合框中的选定值。因为有很多数据我想使用组合框的doQuery函数降低它。 在GridPanel中的rowClick事件我有以下代码:

var myrec = Ext.getCmp('mygrid').store.getAt(rowIndex); 

mycombo.store.on('load', myfn1 = function() { 
    // When the store has finisihed loading, select item in the combobox 
    mycombo.setValue(myrec.data.customer_id); 
    // Remove the function assigend to the load event... 
    // ...(when user types directly to the combobox instead clicking on a row...) 
    mycombo.store.un('load', myfn1); 
}); 
// setValue has to be called again, because the load-event doesn't fires 
// when doQuery is called with same params 
mycombo.setValue(myrec.data.customer_id); 
// Call do query to fill the combo only with the relevant values 
mycombo.doQuery(myrec.data.customer_id); 
0

ComboBoxbeforequery事件,让您拦截查询,做你自己的商店,而不是负担,并取消ComboBox查询的选项。另外,在你的例子中,你将处理函数保存到一个变量中,然后在处理程序中调用un。这是完全没有必要的,因为您可以将选项{single: true}作为第四个参数传递给on(第三个参数是scope)。

如果我理解您的问题,您希望将组合值设置为某个值,例如客户ID 123。问题在于客户123的记录未加载,因此您没有关于该客户的任何数据。我对吗?

,你会想做什么,然后是(这不是你的情况一定是正确的,只是一个方向,让你开始):

​​