2016-11-11 2 views
0

Итак, представьте себе есть слушатель для родного dijit/form/Select элемента, который прослушивает change событие:Dojo: как испустить «изменить» правильно на пользовательском виджете

nativeSelectWidget.on('change', lang.hitch(this, onSelectClick)); 

Теперь, я создал свой собственный пользовательский виджет похож выбрать и пытается слушать, используя один и тот же код:

mySelectWidget.on('change', lang.hitch(this, onSelectClick)); 

onSelectClick выглядит следующим образом:

_onTypeChange: function(value) { 
    console.debug('The value is, value) 
} 

Проблема в том, что во втором случае onSelectClick не принимает никаких значений (undefined).

Пробовал добавить:

on.emit(this.domNode, 'change', { 
    bubbles: true, 
    cancelable: true 
}); 

в виджете _setValueAttr, пытался удалить его. Не было принято никакого значения .. проверено, как собственный Select определен - https://github.com/dojo/dijit/blob/master/form/Select.js

Любые предложения?

ответ

1

Для того, как вы хотите использовать его, вы должны сделать (в пользовательском виджете):

1) наследует от dojo/Evented
2) добавить следующее:

_setValueAttr: function(value) { 
    this._set('value', value); 
    this.emit('change', value); 
} 

Это должно сделать трюк

Однако эта реализация имеет недостаток: Если вы измените значение из другой части кода, эмитент все равно будет отправлен, и обычно мы хотим, чтобы испускать ТОЛЬКО для пользовательских событий, а не для программных изменений.

Смежные вопросы