#extjs #extjs5
#extjs #extjs5
Вопрос:
я работаю над созданием радиогруппы, содержащей два радиоприемника; Я установил прослушиватель изменений в радиогруппе, и, похоже, все работает нормально, за исключением того, что визуально переключатели не проверяются при нажатии, см. Ниже Полный код :
Ext.define('Mine.view.headerThemeButton', {
extend: 'Ext.panel.Panel',
alias: 'widget.headerThemeButton',
xtype: 'headerThemeButton',
width: 50,
height: 58,
padding: 'auto 0 auto 0',
bodyStyle: 'border-color: #FFFFFF !important;',
//id : 'headerThemeButton',
//height: 20,
items: [{
xtype: 'button',
height: '100%',
glyph: 'xf142@FontAwesome',
cls: 'headerButtonsCls',
listeners: {
click: function(e, target) {
var coords = e.getXY();
var x = parseInt(coords[0]);
var y = parseInt(coords[1]);
var finalY = y 50;
Ext.create('Ext.menu.Menu', {
items: [{
xtype: 'radiogroup',
columns: 1,
vertical: true,
items: [{
//xtype: 'radiofield',
boxLabel: 'Dark Mode',
name : 'Mode',
//id : 'dmRB',
inputValue : 'dm'
}, {
//xtype: 'radiofield',
boxLabel: 'Standard Mode',
name : 'Mode',
//id : 'smRB',
inputValue : 'sm'
}],
listeners : {
change : function(radio, newValue, oldValue){
if (radio.getValue().Mode == 'dm'){
radio.checked = true;
this.onChangeThemeDark();
}
else if (radio.getValue().Mode == 'sm'){
radio.checked = true;
this.onChangeThemeStandard();
}
}
}
}]
}).showAt(x, finalY);
}
}
}]
});
Я не могу использовать идентификатор prop для каждого радио, потому что это приведет к дублированию ошибки регистрации.
Любое решение?
Спасибо!
РЕДАКТИРОВАТЬ : вся кнопка включена в интерфейс, определенный :
Ext.define('Mine.view.newDashboard', {
extend: 'Ext.container.Viewport',
alias: 'widget.newDashboard',
controller: 'newDashboard',
reference: 'dashboard',
//overflowY: 'scroll',
//autoScroll:true,
layout: {
type: 'border',
align: 'stretch '
//scrollable: true
},
/*viewConfig:
{
autoScroll: true
},*/
//height: 620,
style: {
'backgroundColor': '#909090 !important'
},
items: [{
region: 'north',
html: '',
border: false,
collapsible: false,
margin: '0 0 0 0',
resizable: false,
//bodyStyle:'border-bottom-width: 0 !important;',
layout: {
type: 'hbox'
// align: 'stretch'
},
items: [{
xtype: 'logolink',
padding: 'auto 0 auto 0'
},
{
xtype: 'tbfill'
},
{
xtype: 'headerThemeButton',
width: '100px'
},...
Ответ №1:
Я не совсем уверен, о чем вы спрашиваете, но я предполагаю, что проблема в том, что когда появляется меню после выбора значения, ничего не выбрано. Также возможно, что вы не можете получить каждую кнопку в событии.
Вот скрипка, которая показывает, как получить каждую кнопку в событии, двумя разными способами.
Кроме того, каждый раз, когда вы нажимали на кнопку, вы создавали новое меню, поэтому при каждом нажатии кнопки отображался новый набор переключателей. Я создаю меню на кнопке, а затем показываю его при нажатии.
Вы также можете создать меню и сохранить его на панели (или где угодно) и показывать это меню каждый раз, если вы не хотите, чтобы оно было прикреплено к кнопке.
Комментарии:
1. Для
this.onChangeThemeStandard();
работы метод должен быть определен в контроллере всего интерфейса, верно?2. если бы вы вызывали это в обработчике событий, метод должен был бы находиться в области действия «this», областью действия которого является radiogroup . в случае скрипки «this» совпадает с переменной radio, поэтому вы можете вызвать this.themeChange или radio.themeChange . Я создал метод, и я вызываю скрипку, перейдите к ее изменению. Пожалуйста, укажите версию extjs, которую вы используете, а также инструментарий, поэтому Extjs 7.3.1 Modern или 6.0 classic.
3. Это ExtJS 6.2.0
4. Кроме того … вы могли бы создать контроллер и поместить метод в контроллер. Вы могли бы добавить метод в контроллер. Затем вы можете настроить контроллер на отслеживание событий, а затем запустить событие, которое запускает метод ….. это хорошо для контроллера представления модели. Тогда у вас нет никакой логики в вашем представлении…
5. Нет,
Mine.view.headerThemeButton
включен в контейнер с использованием синтаксиса{xtype : headerThemeButton}
, этот основной контейнер привязан к контроллеру. Теперь я хочу определитьonChangeThemeDark()
метод в этом контроллере, и мой вопрос будет заключаться в том, как вызвать его из слушателя радиополя? Спасибо!