searchAttr组合框阵列

时间:2011-05-24 10:25:33

标签: dojo

我想知道如何在我的组合框中进行多搜索Attr。我希望有类似的东西:

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

所以我可以在两个标准上自动完成。

1 个答案:

答案 0 :(得分: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”(例如NumberTextBox)的dijit中获取年龄:

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

但是,对于'anotherDijit'diijt更改时要更改的查询中的年龄值,您必须执行以下两项操作之一:

  1. 将观察者/事件处理程序附加到适当的“anotherDijit”事件(例如onChange),这将更新ComboBox商店查询中的新“anotherDijit”值。这是一种PUSH方法。
  2. 将观察者/事件处理程序附加到适当的ComboBox事件(例如onFocus),该事件将从'anotherDijit'dijit中提取当前值,然后更新商店查询参数。
  3. 请注意,您在'query'参数中输入的字段的查询方式与AND(name = this AND age = that等)相同。如果您需要更复杂的查询,使用OR和NOT,您可以使用dojox.data.AndOrReadStore,例如。