道场:如何排放'改变'正确定制小部件

时间:2016-11-11 09:54:19

标签: javascript dojo

所以,假设有一个本地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 个答案:

答案 0 :(得分:1)

对于您想要使用它的方式,您应该(在您的自定义小部件中):

1)继承自dojo/Evented
2)添加以下内容:

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

应该做的伎俩

但是,这种实现有一个缺点: 如果您从另一段代码更改值,则仍会发送emit,并且通常我们希望仅针对用户事件发出,而不是针对程序化更改。