0

我一直在尝试使用 ItemFileReadStore 的查询功能来过滤选择小部件的可选选项列表,而且我的查询似乎对小部件没有影响。查询是通过另一个选择小部件的 onChange 事件完成的,我的目标是当一个小部件选择一个值时,另一个小部件不再包含该值作为选项)。看看dojo 文档站点上的“Codependent FilteringSelect/ComboBox widgets”示例,这似乎相当简单。但是遵循这个例子让我没有任何结果。我尝试使用的小部件如下:

var sel1 = new dijit.form.Select({
                id:"sel1",
                name: "sel1",
                required: true,
                style: "width: 170px;",
                query: {value: "*" },
                store: selStore
        },"sel1");

我还有另一个类似的小部件 sel2,它使用相同的商店。我的“onChange”事件都有以下代码:

 dojo.connect(element, 'onChange', function(event){
                            dojo.forEach([sel1, sel2], function(element){
                                    if(element.getValue() !== event){
                                            element.attr("query", "{value: !" + event + "}");
                                            console.log("querying", element, element.query);
                                            element.store.fetch();
                                    }
                            });

因此,我得到的控制台打印输出返回了正确的元素,并且 element.query 的格式为:{value: !val1},但在任何一个选择小部件的下拉列表中都没有改变。如果有人能提供任何帮助,将不胜感激。谢谢

4

2 回答 2

1

表达式 !val1 是否需要被引用?

于 2010-11-04T19:41:51.230 回答
0

经过一些搜索和实验后,我发现 dijit.form.Select 在查询其数据存储时不像 Filtered Select 小部件那样工作。为了查询数据存储,您必须调用 setStore 方法,将当前使用的相同存储和 fetchArg 形式的查询对象(即 {query: {value: blah}})传递给它。请参阅此处的获取文档。

对于关于找出如何从存储中消除选项以获取所有值!= value1 的问题的后半部分,您可以使用为这些类型的查询设计的存储,称为AndOrReadStore,它从 ItemFileReadStore 扩展并兼容dijit.form.Select 小部件,只需使用 NOT 关键字。

于 2010-11-15T20:18:06.187 回答