DOJO 是否为自定义小部件提供 "extension points" 的替代方案?
Does DOJO offers an alternative to "extension points" for custom widgets?
我正在使用 DIJIT 和 DOJO 1.10 设计自定义小部件。
基本上我的自定义小部件需要有一些行为,比如按钮,所以当用户点击它时会发生一些事情。我需要确保其他开发人员可以在 onClick
在该小部件上触发时添加自定义代码。
在 reading this guide 之后,我了解到我的自定义小部件应该实现 扩展点 。我在 DIJIT 的源代码中注意到 Button.js 并且我看到他们使用了一个名为 dijit._OnDijitClickMixin
.
的特殊混合
下面是我的小部件的代码,到目前为止它工作正常,但我想知道:
- 扩展点的方式是否正确?是否存在更好的选择?
- 阅读文档我看到以下代码。
_onButtonClick: function( /*Event*/ e){
... // Trust me, _onClick calls this._onClick
},
_onClick: function( /*Event*/ e){
...
return this.onClick(e);
},
onClick: { // nothing here: the extension point!
}
我的自定义小部件没有实现任何这些功能,但似乎工作正常。
- 我应该包括这些功能吗?这是什么原因?
小部件
define([
'dojo/_base/declare',
'dijit/_WidgetBase',
'dijit/_OnDijitClickMixin',
'dijit/_TemplatedMixin',
'dojo/text!./templates/template.html'
], function (
declare,
_WidgetBase,
_OnDijitClickMixin,
_TemplatedMixin,
template
) {
return declare([_WidgetBase, _TemplatedMixin, _OnDijitClickMixin], {
templateString: template
});
});
HTML 模板
<div data-dojo-attach-event="ondijitclick:onClick"> </div>
初始化小部件
this._iconPage = new IconPages({
id: 'iconPage',
onClick: function () {
//do smt
}.bind(this)
}).placeAt('content');
您拥有的很好,因为 onClick 方法旨在被覆盖以挂接到事件中。您还可以做的是使用 dojo/on 挂接到 IconPages "click" 事件,方法如下:
on(this._iconPage, "click", /*function here*/);
我正在使用 DIJIT 和 DOJO 1.10 设计自定义小部件。
基本上我的自定义小部件需要有一些行为,比如按钮,所以当用户点击它时会发生一些事情。我需要确保其他开发人员可以在 onClick
在该小部件上触发时添加自定义代码。
在 reading this guide 之后,我了解到我的自定义小部件应该实现 扩展点 。我在 DIJIT 的源代码中注意到 Button.js 并且我看到他们使用了一个名为 dijit._OnDijitClickMixin
.
下面是我的小部件的代码,到目前为止它工作正常,但我想知道:
- 扩展点的方式是否正确?是否存在更好的选择?
- 阅读文档我看到以下代码。
_onButtonClick: function( /*Event*/ e){
... // Trust me, _onClick calls this._onClick
},
_onClick: function( /*Event*/ e){
...
return this.onClick(e);
},
onClick: { // nothing here: the extension point!
}
我的自定义小部件没有实现任何这些功能,但似乎工作正常。
- 我应该包括这些功能吗?这是什么原因?
小部件
define([
'dojo/_base/declare',
'dijit/_WidgetBase',
'dijit/_OnDijitClickMixin',
'dijit/_TemplatedMixin',
'dojo/text!./templates/template.html'
], function (
declare,
_WidgetBase,
_OnDijitClickMixin,
_TemplatedMixin,
template
) {
return declare([_WidgetBase, _TemplatedMixin, _OnDijitClickMixin], {
templateString: template
});
});
HTML 模板
<div data-dojo-attach-event="ondijitclick:onClick"> </div>
初始化小部件
this._iconPage = new IconPages({
id: 'iconPage',
onClick: function () {
//do smt
}.bind(this)
}).placeAt('content');
您拥有的很好,因为 onClick 方法旨在被覆盖以挂接到事件中。您还可以做的是使用 dojo/on 挂接到 IconPages "click" 事件,方法如下:
on(this._iconPage, "click", /*function here*/);