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*/);