ExtJS 4 - Контроль событий предметов в MVC - PullRequest
1 голос
/ 23 октября 2011

У меня есть приложение в MVC с классом представления:

Ext.define('a.view.Mainmenu' ,{
    extend: 'Ext.menu.Menu',
    alias: 'widget.mainmenu',
    text: 'Menu',
    items: [
    {
        xtype: 'menucheckitem',
        id: 'mci1',
        text: 'a'
    },
    {
        xtype: 'menucheckitem',
        id: 'mci2',
        text: 'b'
    }]
});

Как я могу контролировать события щелчка элементов меню в контроллере? Я хочу проверить, проверены ли пункты меню. Я пытался что-то в функции инициализации контроллера, но есть ошибка (item.down ("mci1") является нулевым):

...
init: function() {
    this.control({
        'mainmenu': {
            click: function(item) {
                if (item.down('mci1').checked == true) {
                    ...
                }
                if (item.down('mci2').checked == true) {
                    ...
                }
            }
        }
    });
}

Как я мог сделать это правильно?

Ответы [ 2 ]

1 голос
/ 27 октября 2011

@ Ринго,

Ни у menu menu, ни menucheckitem нет метода down (), доступного для них в соответствии с документами Sencha (http://docs.sencha.com/ext-js/4-0/#!/api/Ext.menu.CheckItem-event-checkchange).

).

Итак, вот почему они не работают.

Для xtype элемента menucheckitem существует событие, называемое checkchange. Это событие делает следующие аргументы доступными для вашей функции:

  • this (Ext.menu.CheckItem) <= фактический элемент проверки меню, который был отмечен / снят (например, mci1 или mci2 в зависимости от того, на каком пользователь нажал) </li>
  • check (Boolean) <= true, если изменение установило элемент menucheckitem как проверенное, и false, если не отмечено. </li>

Итак, для этого потребуется только сделать что-то вроде:

...
init: function() {
this.control({
    'mainmenu menucheckitem': {
        checkchange: function(item, checked) {
            if (checked) {
                if(item.id == 'mci1'){
                  ...
                }
            }else{
                ...
            }
        }
    }
  });
}
0 голосов
/ 27 октября 2011

Параметр элемента уже является вашим пунктом меню. Вам не нужно опрашивать.

так будет:

if(item.checked && item.getId() == 'mci1'){
...
}
...