Я не могу правильно прикрепить событие onchange к виджету dijit.form.Select. Тем не менее, я новичок в веб-разработке, поэтому я мог делать что-то совершенно идиотское (хотя, насколько я могу судить (и я прочитал все документы, которые смог найти), я не). Я убедился, что класс body соответствует теме dojo, что я dojo.require () для всех виджетов, которые я использую (и dojo.parser), и все же nada. Код, который я использую:
dojo.addOnLoad(function () {
var _query = dojo.query('.toggle');
for (var i in _query) {
dojo.connect(_query[i], 'onchange', function (ev) {
console.log(ev + ' fired onchange');
});
}
});
Любая помощь будет приветствоваться.
Добавление: после более глубокого изучения внутренних аспектов того, как dijit отображает виджеты, я обнаружил, что когда я добавляю пару атрибут-значение dojoType = 'dijit.form.Select' к моему html-элементу (делая это декларативно), dijit фактически отображает однорядный двухколонный стол. Первый элемент таблицы - это span (с классом dijitSelectLabel), который, как я предполагаю, просто отображает выбранный (или используемый по умолчанию) элемент. Второй элемент выглядит как кнопка, отображаемая в виде стрелки вниз, которая переключает отображение элементов меню в ответ на определенные события DOM. Кроме того (и я думал, что это было довольно изящно), dijit фактически не помещает опции выбора в дерево DOM, пока не сработает одно из этих событий. Я посмотрел HTML-код в Firebug сразу после новой загрузки страницы (прежде чем щелкнуть по чему-либо), и второй вариант нигде не найти. Затем, как только я нажимаю на кнопку со стрелкой, появляется виджет dijit.Menu, dijit прикрепляет dijit.Menu к концу узла body; после того, как я щелкну где-то еще, виджет «Меню» по-прежнему остается lastChild тела, теперь он просто скрыт и не привязан к форме. Выберите виджет.
Должно ли это быть действительно сложно, если все, что я хочу сделать, это поместить другой виджет dijit.form в дерево DOM в зависимости от того, какой элемент выбирает пользователь?
Заключение:
Оказывается, это была проблема с заглавными буквами.
dojo.connect(widget_obj, 'onChange', function_obj);
работает, тогда как
dojo.connect(widget_obj, 'onchange', function_obj);
нет.
Так что я был прав, что был совершенно глупым. Я предполагал, что, поскольку вся строчная версия работает, если поместить в нее html-тег в качестве атрибута, Dojo будет относиться к нему так же. Это имеет смысл, поскольку dijit.form.Select не имеет атрибута .onchange, но имеет атрибут .onChange. (В конечном итоге я придерживался .Select вместо .FilteringSelect, потому что у меня нет пользователей, чтобы у меня создавалось впечатление, что они могут что-то печатать.) Итак, кому из вас, ребята, я отвечу (потому что вы оба В ваших постах было onChange, я думаю, я был слишком неопытен, чтобы понять, что дело имело значение)?