Dojo中父模块和子模块之间的关系
我定义了一个自定义Dojo模块,如下所示:Dojo中父模块和子模块之间的关系,dojo,Dojo,我定义了一个自定义Dojo模块,如下所示: define([ "dojo/_base/declare", "dijit/_TemplatedMixin", "dijit/_WidgetBase", "dijit/_WidgetsInTemplateMixin" ], function (declare, _TemplatedMixin, _WidgetBase,_WidgetsInTemplateMixin){ var _Base = declare("
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;
}
我还定义了另一个模块,它扩展了\u 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,
{
...
});
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,
...
});
定义2
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,
{
...
});
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,
...
});
我的问题是上面哪一个是invitewelcome.js
的正确定义
感谢您在定义1中使用以下层次结构:
_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin => _Base => InviteeWelcome
_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin => _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, _Base => InviteeWelcome
在第二个定义中,您使用以下层次结构:
_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin => _Base => InviteeWelcome
_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin => _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, _Base => InviteeWelcome
在这种情况下,没有任何区别(除了可能与性能相关)\u Base
已经从\u WidgetBase
、\u TemplatedMixin
和\u WidgetsInTemplateMixin
继承,因此如果您从这3+\u Base
继承,则\u Base
将“覆盖”所有这些模块(因为它已经具有其他模块的所有行为)
但如果您要更改定义2so中mixin模块的顺序,则它将变为:
[\u Base、\u WidgetBase、\u TemplatedMixin、\u WidgetsInTemplateMixin]
然后,您在\u Base
中覆盖的所有内容都将被\u WidgetBase
、\u TemplatedMixin
和\u WidgetsInTemplateMixin
中的默认值再次覆盖
我认为您的第一种方法也会起作用,并且可能不会那么混乱。这里真的没有问题吗 定义1和定义2之间的区别只是在
Def 1
中没有添加_WidgetsInTemplateMixin。您拥有的两个自定义模块都扩展了相同的_基类,但是在def2
中添加了两次相同的混音。唯一的结果是,类是从左到右应用的,因此可能会意外地覆盖某些设置。(尽管您提供的示例并非如此)
此外,随着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 ], {
...
...
...
});
实际上,我是Dojo的新手,这些类是由其他人编写的。所以,我只是想确认,如果我在
invitewelcome.js
中包含_Base,我是否需要显式地包含\u WidgetBase、\u TemplatedMixin、\u WidgetsInTemplateMixin
?因为它们已经包含在\u Base.js
中,非常感谢。你的解释很好,对我很有帮助。接受你的回答。我发布了一个关于Dojo的问题,你能看一下吗?