DOJO是否提供了#34;扩展点的替代方案"自定义小部件?

时间:2015-11-04 14:50:29

标签: javascript dojo

我正在使用DIJIT和DOJO 1.10设计自定义小部件。

基本上我的自定义窗口小部件需要有一些像按钮这样的行为,所以当用户点击它时会发生一些事情。我需要确保其他开发人员可以在onClick在该窗口小部件上触发时添加自定义代码。

reading this guide之后,我了解我的自定义窗口小部件应该实现扩展点。我在DIJIT的源代码中注意到Button.js,我看到他们使用了一个名为dijit._OnDijitClickMixin的特殊mixin。

我的小部件的代码,到目前为止它工作正常,但我想知道:

  • 扩展点是正确的吗?是否存在更好的替代方案?
  • 阅读文档,我看到以下代码。
_onButtonClick: function( /*Event*/ e){
  ... // Trust me, _onClick calls this._onClick
},
_onClick: function( /*Event*/ e){
  ...
  return this.onClick(e);
},
onClick: { // nothing here: the extension point!

}

我的自定义小部件没有实现任何这些功能,似乎工作正常。

  • 我可以包含这些功能吗?这是什么原因?

的widget

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');

1 个答案:

答案 0 :(得分:1)

你所拥有的一切都很好,因为onClick方法意味着被覆盖以挂钩事件。您还可以做的是挂钩您的IconPages&#34;点击&#34;通过这样的事情使用dojo/on的事件:

on(this._iconPage, "click", /*function here*/);