Виджет Dojo Select не запрашивает содержимое выборочно из хранилища данных

Я пытался использовать функцию запроса ItemFileReadStore для фильтрации списка доступных для выбора параметров выбранного виджета, и кажется, что мои запросы не влияют на виджет. Запрос выполняется через событие onChange другого виджета выбора, моя цель состоит в том, что когда один виджет выбирает значение, другой больше не содержит это значение в качестве опции). Это кажется довольно простым, глядя на пример «Взаимозависимых виджетов FilteringSelect/ComboBox» на сайте документации dojo. Но следование этому примеру не дало мне никаких результатов. Мой виджет, который я пытаюсь использовать, приведен ниже:

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}, но в раскрывающемся списке любого из выбранных виджетов ничего не изменяется. Если бы кто-нибудь мог оказать какую-либо помощь, это было бы очень признательно. Спасибо


person Traker    schedule 28.10.2010    source источник


Ответы (2)


нужно ли выражение !val1 заключать в кавычки?

person peller    schedule 04.11.2010
comment
Да, я бы попробовал... поэтому измените строку на: element.attr(query, {value: '! + event + '}); ... правильно? - person JasonStoltz; 09.11.2010

После некоторых поисков и экспериментов я обнаружил, что dijit.form.Select не работает как виджет Filtered Select, когда дело доходит до запроса его хранилища данных. Чтобы запросить хранилище данных, вы должны вызвать метод setStore, передав ему то же хранилище, которое используется в настоящее время, и объект запроса в форме fetchArg (т. е. {query: {value: blah}}). См. документацию по выборке здесь.

Для второй половины вопроса о том, как удалить параметры из хранилища в результате выборки всех значений != value1, вы можете использовать хранилище, предназначенное для этих типов запросов, известное как AndOrReadStore, который является продолжением ItemFileReadStore и совместим с виджетом dijit.form.Select, и просто используйте ключевое слово NOT.

person Traker    schedule 15.11.2010