Dojo:如何增强 dijit?
Dojo: how to enhance a dijit?
是否可以通过编程方式将特定行为绑定到 dijit?
即假设我在整个项目中经常使用这个 dijit/form/NumberSpinner。现在我想在所有 NumberSpinners 上都有一个 onFocus: function() { console.log('hi') }
。
通常我会这样做:
… new NumberSpinner({
onFocus: function() { console.log('hi'); },
…
});
在每个元素上。没有办法将此绑定为每个 NumberSpinner 实例的默认行为吗??
谢谢
我终于找到了如何做到这一点。
使用扩展
像这样:
lang.extend(NumberSpinner, {
_onFocus: function() { console.log('hi'); }
});
JSBIN 上的工作示例:https://jsbin.com/sesotolove/2/edit?html,output
参考:https://dojotoolkit.org/reference-guide/1.7/dojo/extend.html
使用原型
同样可以通过像这样覆盖原型来实现:
NumberSpinner.prototype._onFocus: function() { console.log('hi'); }
一个选项是创建您自己的自定义组件,从 NumberSpinner
和 overwrite/add 扩展您想要的所有功能和属性。
示例:
app/CustomNumberSpinner.js
define([
'dojo/_base/declare',
'dijit/form/NumberSpinner'
], function(
declare,
NumberSpinner
) {
// The declare and the references passed in the array on the next line defines what you are extending
return declare([NumberSpinner], {
/* Add all functions/props that you want in this object */
onFocus: function() {
console.log('Hi, this is a onFocus event being handled');
}
});
});
编写自定义组件后,您只需在要使用它的地方导入模块并实例化它,就像您使用默认 NumberSpinner 一样,但是您不需要传递 props/functions 你需要在构造函数参数中)。
是否可以通过编程方式将特定行为绑定到 dijit?
即假设我在整个项目中经常使用这个 dijit/form/NumberSpinner。现在我想在所有 NumberSpinners 上都有一个 onFocus: function() { console.log('hi') }
。
通常我会这样做:
… new NumberSpinner({
onFocus: function() { console.log('hi'); },
…
});
在每个元素上。没有办法将此绑定为每个 NumberSpinner 实例的默认行为吗??
谢谢
我终于找到了如何做到这一点。
使用扩展
像这样:
lang.extend(NumberSpinner, {
_onFocus: function() { console.log('hi'); }
});
JSBIN 上的工作示例:https://jsbin.com/sesotolove/2/edit?html,output
参考:https://dojotoolkit.org/reference-guide/1.7/dojo/extend.html
使用原型
同样可以通过像这样覆盖原型来实现:
NumberSpinner.prototype._onFocus: function() { console.log('hi'); }
一个选项是创建您自己的自定义组件,从 NumberSpinner
和 overwrite/add 扩展您想要的所有功能和属性。
示例:
app/CustomNumberSpinner.js
define([
'dojo/_base/declare',
'dijit/form/NumberSpinner'
], function(
declare,
NumberSpinner
) {
// The declare and the references passed in the array on the next line defines what you are extending
return declare([NumberSpinner], {
/* Add all functions/props that you want in this object */
onFocus: function() {
console.log('Hi, this is a onFocus event being handled');
}
});
});
编写自定义组件后,您只需在要使用它的地方导入模块并实例化它,就像您使用默认 NumberSpinner 一样,但是您不需要传递 props/functions 你需要在构造函数参数中)。