2011-01-26 5 views
2

В настоящее время у меня есть группа checkbox dojo (dijit.form.CheckBox с именами в форме «some_name []»). Она работает точно так, как хотелось, однако мне нужно добавить кнопку «Выбрать все»/ссылку, предпочтительнее другого флажка (это не должно быть необходимо, поскольку функциональность будет реализована в js).Выделить все на dojo checkbox group

Является ли способ «додзе» для этого, поскольку использование стандартного js, кажется, позволяет получить элементы отлично, но установка element.checked = true не влияет. В целях тестирования я отключил dijit.form.CheckBox (так что у меня есть стандартные флажки стандартного болота), и я могу отметить все флажки, отмеченные кодом, который терпит неудачу, когда dojo'ified.

Я бегу додзё 1.5, если это делает никакой разницы

UPDATE:

ОК, это, кажется, установив флажок, чтобы проверить/снят, но не повторно рендеринга додзё виджет. Мне также говорят, что у флажков нет никакого метода, который я ожидаю, что у них будут объекты dijit.form.CheckBox (например, метод set()).

ответ

6

Так я узнал, что проблема была. Я делал dojo.query(), чтобы получить вершины checkbox group dom. Однако это не возвращает виджет dijit. Чтобы получить то, что я должен был сделать:

nodes = dojo.query('[name=\"checkbox_group[]\"]'); 
dojo.forEach(nodes,function(node) 
    {dijit.getEnclosingWidget(node).set("checked",true);}); 

Путем манипулирования виджетами он визуально обновляется правильно. Кроме того, я не знал, что элемент ввода флажка не сам виджет, поэтому dijit.byNode(node) возвращает undefined, поскольку узел флажка не соответствует ни одному из инициализированных виджетах диджета.

0

Мы делаем это как показано ниже. Это урезано из множества других вещей, которые подключаются как обработчики в функции «addHandlers», которая вызывается при загрузке страницы.

selectall и clearall - ссылки, к которым мы подключаемся.

var selectall = dojo.byId('selectall'); 
var clearall = dojo.byId('clearall'); 

var checklist = getCheckboxList(); // Magic happens here (1) 

dojo.connect(selectall, "onclick", 
    function(evt) { 
     allClick(evt, checklist, true); 
    } 
); 

dojo.connect(clearall, "onclick", 
    function(evt) { 
     allClick(evt, checklist, false); 
    } 
); 

(1) Мы получаем список флажков, которые будут затронуты на основе некоторых уродливых критериев, и мы используем список более чем этот чек/четко все - вы могли бы, вероятно, сделать что-то гораздо проще чтобы получить ваш.

Функция «allClick» просто проверяет или неустановленный список вещей, которые вы передаете его

function allClick(evt, list, checkstate) 
{ 
    dojo.forEach(list, 
     function(el, idx, ary) { 
      el.checked = checkstate; 
     } 
    ); 
    evt.preventDefault(); // keep the link from firing 
} 
+0

Это то, что я делал. Проблема в том, что додзё, по-видимому, переопределяет e1.checked = true; – Endophage

+0

Я нашел ответ ниже. Извините, я не мог быть более ясным в исходном вопросе, я все еще нахожу свой путь вокруг додзё и часто не знаю, какую часть головоломки мне не хватает. – Endophage

0

В случае, если кто смотрит на это ответ, и в настоящее время (4 года) еще один способ сделать это:

var checkboxes = registry.findWidgets(dom.byId('checkGroupWrapper')); 

checkboxes.forEach(function (checkboxWidg) { 
    checkboxWidg.set('checked', true); 
}); 

См this documentation.

Смежные вопросы