Обработчик событий для флажка / dojox.grid.cells.Bool в ItemFileWriteStore в EnhancedGrid?

У меня есть расширенная сетка, заполненная ItemFileWriteStore. Один из элементов данных в хранилище:

check: true

Затем в расширенной сетке у меня есть:

{
   field: "check",
   name: "Value Check",
   editable: true,
   type: dojox.grid.cells.Bool
}

Это дает мне столбец, полный флажков. Я не смог найти, как обрабатывать эти флажки. Я хочу начать с каждого установленного флажка, и если вы снимите флажок, он удалит соответствующий фрагмент данных. Есть ли какой-нибудь обработчик событий, который я могу прикрепить, может быть, dojo/on? Или какой-то метод расширенной сетки, о котором я не знаю? Я не смог найти никакой документации по этому вопросу, я чувствую, что что-то упускаю.


person Eric Alberson    schedule 11.09.2013    source источник


Ответы (3)


Вы бы сделали что-то вроде этого::

require(['dijit/registry','dojo/on','dijit/WidgetSet','dojo/on'],function(reg,on){
    reg.byClass("dojox.grid.cells.Bool").forEach(function(node){
                   on(node.domNode,'click',function(){alert('hello');});
     });

});
person tik27    schedule 11.09.2013
comment
Это не сработало для меня, не знаю, почему. Но я опубликую решение, которое я придумал. - person Eric Alberson; 16.09.2013

Я обнаружил, что лучшим решением было присоединить обработчик к событию «RowClick», поскольку каждый раз, когда вы нажимаете на флажок, запускается событие RowClick. Затем прокрутите хранилище данных и обновите все на основе флажка. Это определенно не эффективно, но делает то, что мне нужно. Это что-то вроде этого:

grid.on("RowClick", function (event) {
  for (var i=0; i<store._arrayOfAllItems.length; i++) {
    if (grid.getItem(i)) {
      if (grid.getItem(i).check[0]) {
        // row is checked, do something
      } else {
        // row is not checked, do something else
      }
    }
  }
} 

Насколько я могу судить, event не передает информацию, полезную для определения того, какая строка в сетке была нажата (я не уверен на 100%, в ней много). Так что это лучший способ, который я придумал.

person Eric Alberson    schedule 16.09.2013

       {
            name: 'Paid',
            field: 'paid',
            width: '40px',
            type: dojox.grid.cells.Bool,
            editable:true,
            doclick:function(e){
                if(e.target.tagName == 'INPUT'){
                    if(confirm("Sure?")){
                        this.applyStaticValue(e.rowIndex);
                    } else {
                        e.target.checked = !e.target.checked;
                    }
                }
            }
        }

Это старый вопрос, и я погуглил здесь. Жаль, что мой ответ может помочь кому-то.

person zhzhwcn    schedule 16.09.2015