ExtJS 4 — События управления элементами в MVC

#extjs4 #menuitem #extjs-mvc

#extjs4 #элемент меню #extjs-mvc

Вопрос:

У меня есть приложение в 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'
    }]
});
 

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

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

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

Ответ №1:

@Ringo,

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

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

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

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

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

 ...
init: function() {
this.control({
    'mainmenu menucheckitem': {
        checkchange: function(item, checked) {
            if (checked) {
                if(item.id == 'mci1'){
                  ...
                }
            }else{
                ...
            }
        }
    }
  });
}
 

Ответ №2:

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

так что это было бы:

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