dojo dijit 额外模板连接事件

Posted

技术标签:

【中文标题】dojo dijit 额外模板连接事件【英文标题】:dojo dijit extra template wire up events 【发布时间】:2018-02-13 11:53:19 【问题描述】:

我正在使用 dojo dijit 创建一个模板化的小部件,但是需要加载一个带有 data-dojo-attach-event 的单独 html 模板表单并连接事件,因为该表单被设计为递归地使用多级,即被实例化并放置在对话框中。但是,问题是如何使用模板中已经指定的“data-dojo-attach-event”信息在额外模板中将事件连接到主窗口小部件的方法,而无需显式编写代码来连接事件处理程序。

这里是简化的代码:

define([
    "dojo/_base/declare",
    "dijit/_WidgetBase",
    "dijit/_OnDijitClickMixin",
    "dijit/_TemplatedMixin",
    "dojo/text!./templates/SomeWidget.html",
    "dojo/text!./templates/extraTemplate.html"
], function(declare, _WidgetBase, _OnDijitClickMixin, _TemplatedMixin,
        template, extraTemplate) 

    return declare([_WidgetBase, _OnDijitClickMixin, _TemplatedMixin], 
        templateString: template

        // what should I do here???

        postCreate: function () 
           var self = this;

           this.inherited(arguments);

           // or, what should I do here or otherwise???
        

        clickme: function(evt) 
           // do something
        
    );

);

额外模板.html:

<div>
   <button data-dojo-type="dijit/form/Button" data-dojo-attach-event="onclick: clickme">button</button>
</div>

【问题讨论】:

【参考方案1】:

您可以使用您的 extraTemplate 再创建一个小部件,并为其定义一些默认的点击处理程序:

define([
    "dojo/_base/declare",
    "dijit/_WidgetBase",
    "dijit/_TemplatedMixin",
    "dojo/text!./extraTemplate.html"
], function (
    declare,
    _WidgetBase,
    _TemplatedMixin,
    _WidgetsInTemplateMixin,
    template
) 
    return declare("Extra", [_WidgetBase, _TemplatedMixin], 
        templateString: template,
        clickHandler: function () 
        
    );
);

在您的“主”小部件中创建它的实例并将点击处理程序传递给构造函数:

define([
    "dojo/_base/declare",
    "dijit/_WidgetBase",
    "dijit/_OnDijitClickMixin",
    "dijit/_TemplatedMixin",
    "dojo/text!./templates/SomeWidget.html",
    "./ExtraForm"

], function(
  declare, 
  _WidgetBase, 
  _OnDijitClickMixin, 
  _TemplatedMixin,
  template,
  ExtraForm
) 

    return declare([_WidgetBase, _OnDijitClickMixin, _TemplatedMixin], 
        templateString: template

        // what should I do here???

        postCreate: function () 
           var self = this;

           this.inherited(arguments);

           let form = new ExtraForm(
               clickHandler: this.clickme
           )
        

        clickme: function(evt) 
           // do something
        
    );

);

【讨论】:

以上是关于dojo dijit 额外模板连接事件的主要内容,如果未能解决你的问题,请参考以下文章

Dojo:无法停止“onClick”dijit 事件

dojo.dijit.Button 触发 onclick 事件两次

Dijit 树和 postCreate 事件 (dojo 1.3)

将onpaste事件添加到dijit / Editor

Dojo:dojo onblur 事件

Dojo - dijit / ComboBox - 鼠标选择不起作用