Dojo Select小部件不会有选择地从数据存储区查询内容

时间:2010-10-28 18:04:30

标签: javascript ajax dojo dijit.form

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

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},但在任一选择小部件的下拉列表中都没有改变。 如果有人可以提供任何帮助,我们将非常感激。 谢谢

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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