Как прослушать ВСЕ "Checked" или "UnChecked" событие при использовании CheckBoxModel в ExtJS 4? - PullRequest
4 голосов
/ 22 декабря 2011

В ExtJS 4 я использую CheckBoxModel в своей сетке. Панель вместе с отображаемым счетчиком, который показывает текущее количество выбранных записей. Затем я обновляю счетчик выбранных записей, прослушивая событие, когда отдельная запись была отмечена или снята, затем публикуя значение выбранного массива. Работает просто отлично при выборе отдельных записей. Однако, когда я устанавливаю флажок «ВСЕ», который выбирает или отменяет выбор всех записей, я не могу найти точку входа для моего прослушивателя для события click, поэтому отображаемое количество записей не обновляется. Кроме того, для CheckBoxModel такого события «ВСЕ» не выбрано / не выбрано.

Ответы [ 2 ]

3 голосов
/ 30 сентября 2013

Недавно я обнаружил, что мне также необходимо привязать некоторые функции к операциям selectall и deselectall в сетке.Моим решением было расширить модель выбора checkboxmodel, чтобы я мог подключить selectall и deselectall слушателей, которые запускают в нужное время.Самым простым способом сделать это было что-то вроде следующего.

Сначала объявите вашу новую модель и убедитесь, что она расширяет checkboxModel

Ext.define('My.selection.CheckboxModel', {
  extend: 'Ext.selection.CheckboxModel',
  onHeaderClick: function (headerCt, header, e) {
    if (header.isCheckerHd) {
      e.stopEvent();
      var me = this, isChecked = header.el.hasCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');
      me.preventFocus = true;
      if (isChecked) {
        me.deselectAll(); // Pass true as a parameter to prevent selectionchanged and select events firing
        me.fireEvent('deselectall', me);
      }
      else {
        me.selectAll(); // Pass true as a parameter to prevent selectionchanged and select events firing
        me.fireEvent('selectall', me);
      }
      delete me.preventFocus;
    }
  }
});

Затем в вашей сетке добавьте следующее selModel вобъект конфигурации:

  selModel: Ext.create('My.selection.CheckboxModel', {
    checkOnly: true, // you can add whatever normal configuration properties you want here
    listeners: {
      selectall: function () { console.log('selectAll'); },
      deselectall: function () { console.log('deselectAll'); }
    }
  }),

Стоит отметить, что прослушиватели selectionChanged и select в сетке и строках также будут срабатывать, если вы не передадите true в вызовы selectall и deselectall врасширенный выбор модели.

3 голосов
/ 22 декабря 2011

попробуйте добавить прослушиватель selectionchange в CheckboxModel: срабатывает после изменения выбора.

чек это

...