2011-05-24 38 views
1

我想知道我怎么能在我的组合框中有多重搜索Attr。我想有这样的东西:searchAttr combobox array

 var cb = dijit.byId('myCombo'); 
    cb.attr('store', store); 
    cb.attr('searchAttr', ["name","age"]); 

所以我可以使两个标准的自动完成。

回答

2

我会假设你正在使用dojo.data.ItemFileReadStore。 searchAttr仅适用于您在ComboBox中输入的属性。

例如,如果你输入一个名字,但你也想筛选年龄的,你一个字段添加到查询参数:

// Get names with age=30 
// Use set because attr is deprecated 
cb.set('query', { 'age' : 30 }); 

如果您想更具体的一个名字当最初加载页面,你可以在你的查询指定:

// All names starting with 'a' and age=30 
cb.set('query', { 'name' : 'a*', 'age' : 30 }); 

如果你想你的年龄是动态的,必须从另一个地方(如dijit的,表单元素,DOM节点等得到它)。下面是一个例子,从所谓的“anotherDijit”(例如数字框)时,页面加载另一个dijit的获得年龄:

// Get names with age specified in 'anotherDijit' 
cb.set('query', { 'age' : dijit.byId('anotherDijit').getValue() }); 

但是,在查询年龄值改变的时候,“anotherDijit” diijt变化,你必须做两件事情之一:

  1. 附加观察员/事件处理程序,以一个合适的“anotherDijit”事件(例如的onChange),这将更新您的组合框存储查询新的“anotherDijit的价值。这是一种推动方法。
  2. 将观察者/事件处理程序附加到适当的ComboBox事件(例如onFocus),该事件将从'anotherDijit'dijit中拉出当前值,然后更新商店查询参数。

请注意,您在“查询”参数中输入的字段被查询为AND(name = this AND age = that等)。如果您需要更复杂的查询,例如使用OR和NOT,则可以使用dojox.data.AndOrReadStore。

+0

这不是假的答案!感谢花时间。 – gpasse 2011-05-26 08:22:04