Dojo Select виджет не выборочно запрашивает содержимое из хранилища данных
Я пытался использовать функциональность запросов ItemFileReadStore, чтобы отфильтровать список доступных для выбора виджетов, и кажется, что мои запросы не влияют на виджет. Запрос выполняется через событие onChange другого виджета выбора, моя цель состоит в том, чтобы, когда один виджет выбирал значение, другой больше не содержал это значение в качестве опции). Это выглядело довольно просто, если посмотреть на пример "Codependent FilteringSelect/ComboBox widgets" на сайте документации 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}, но в выпадающем меню любого из выбранных виджетов ничего не изменяется. Если бы кто-нибудь мог оказать какую-либо помощь, он был бы очень признателен. Спасибо
2 ответа
После некоторого поиска и экспериментов я обнаружил, что dijit.form.Select не работает как виджет Filtered Select, когда дело доходит до запроса его хранилища данных. Чтобы запросить хранилище данных, вы должны вызвать метод setStore, передав ему то же хранилище, которое используется в данный момент, и объект запроса в форме fetchArg (т.е. {query: {value: blah}}). Смотрите документацию здесь.
Во второй половине вопроса о том, как выяснить, как исключить параметры из хранилища с помощью извлечения всех значений!= Значение1, вы можете использовать хранилище, предназначенное для этих типов запросов, известное как AndOrReadStore, которое происходит от ItemFileReadStore и совместимо с виджет dijit.form.Select и просто используйте ключевое слово NOT.