Dojo:如何在自定义小部件上正确发出 'change'
Dojo: how to emit 'change' properly on custom widget
所以,假设有一个原生 dijit/form/Select
元素的侦听器,它侦听 change
事件:
nativeSelectWidget.on('change', lang.hitch(this, onSelectClick));
现在,我创建了自己的类似于 Select 的自定义小部件,并尝试使用相同的代码收听:
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) 继承自 dojo/Evented
2) 添加以下内容:
_setValueAttr: function(value) {
this._set('value', value);
this.emit('change', value);
}
这应该可以解决问题
但是,此实现有一个缺点:
如果您更改另一段代码的值,发射仍将被发送,通常我们只希望发射用于用户事件,而不是用于编程更改。
所以,假设有一个原生 dijit/form/Select
元素的侦听器,它侦听 change
事件:
nativeSelectWidget.on('change', lang.hitch(this, onSelectClick));
现在,我创建了自己的类似于 Select 的自定义小部件,并尝试使用相同的代码收听:
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) 继承自 dojo/Evented
2) 添加以下内容:
_setValueAttr: function(value) {
this._set('value', value);
this.emit('change', value);
}
这应该可以解决问题
但是,此实现有一个缺点: 如果您更改另一段代码的值,发射仍将被发送,通常我们只希望发射用于用户事件,而不是用于编程更改。