Dojo中父模块和子模块之间的关系

时间:2014-04-17 10:30:42

标签: dojo

我已经定义了一个自定义Dojo模块,如下所示:

 define([
    "dojo/_base/declare",
    "dijit/_TemplatedMixin",
    "dijit/_WidgetBase",
    "dijit/_WidgetsInTemplateMixin"
], function (declare, _TemplatedMixin, _WidgetBase,_WidgetsInTemplateMixin){
    var _Base = declare("tt.widget.dashboards._Base", [_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin], {

    widgetsInTemplate: true,
    .....
    });
    return _Base;
}

我还定义了另一个扩展_Base.js模块的模块,如下所示:
定义1

define([
    "dojo/_base/declare",
    "dojo/text!tt/widget/landingPages/templates/InviteeWelcome.html",
    "dojo/topic",
    "dijit/form/CheckBox",
    "tt/widget/RoundedBox",
    "t/widget/RoundedButton",
    "tt/widget/Dashboards/_Base"
], function (declare, template, topic, CheckBox, RoundedBox, RoundedButton, _Base) {

    var InviteeWelcome = declare("tt.widget.landingPages.InviteeWelcome", _Base,
{
 ...
});

定义2

define([
        "dojo/_base/declare",
        "dojo/text!tt/widget/landingPages/templates/InviteeWelcome.html",
        "dojo/topic",
        "dijit/form/CheckBox",
        "tt/widget/RoundedBox",
        "t/widget/RoundedButton",
            "dijit/_WidgetBase",
            "dijit/_TemplatedMixin",
            "dijit/_WidgetsInTemplateMixin"
        "tt/widget/Dashboards/_Base"
    ], function (declare, template, topic, CheckBox, RoundedBox, RoundedButton, _Base, _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin) {

        var InviteeWelcome = declare("tt.widget.landingPages.InviteeWelcome", [_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, _Base],
    {
        widgetsInTemplate: true,
        ...
    });

我的问题是上面哪一个是InviteeWelcome.js的正确定义?

由于

2 个答案:

答案 0 :(得分:1)

在定义1中,您使用以下层次结构:

_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin => _Base => InviteeWelcome

在您的第二个定义中,您使用以下层次结构:

_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin => _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, _Base => InviteeWelcome

在这种情况下,根本没有差别(可能与性能有关)。 _Base已经从_WidgetBase_TemplatedMixin_WidgetsInTemplateMixin继承,因此,如果您从3 + _Base继承,那么_Base将& #34;倍率"所有这些(因为它已经具有其他模块的行为)。

但是如果你改变定义2中的mixin模块的顺序,它就变成了:

[ _Base, _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin ]

然后,您在_Base中覆盖的所有内容都会被_WidgetBase_TemplatedMixin_WidgetsInTemplateMixin中的默认值覆盖。

我认为你的第一种方法也会起作用,而且可能不那么令人困惑。

答案 1 :(得分:1)

这里真的没有问题吗?

定义1 定义2 之间的区别仅在Def 1中您没有添加_WidgetsInTemplateMixin。您拥有的两个自定义模块都扩展了相同的_Base类,但是在Def 2中,您添加了两次相同的mixins。唯一的结果是,您的课程从左到右应用,因此您可能会无意中覆盖某些设置。 (虽然从你提供的例子来看,情况并非如此)。

此外,使用dojo继续前进,如果您不需要模块名称,最好避免使用它们。

这是我最近在今天早上创建的迷你自定义模块..

define( [
    "dojo/text!./TemplatePalette.html",
    "dijit/_Widget",
    "dijit/_TemplatedMixin",
    "dojo/_base/declare",
    "dojo/dom-construct",  
    "dojo/_base/lang",
    "dojo/topic"

    ] ,
    function( template, _Widget, _TemplatedMixin, declare, 
              domConstruct, lang, topic ){    
        return declare( [_Widget, _TemplatedMixin ], { 
    ...
    ...
    ...
    });