我已经定义了一个自定义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
的正确定义?
由于
答案 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 ], {
...
...
...
});