#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'){
...
}