我创建了一个名为“Dialog”的模板化基本小部件,我想将其用作包内所有其他部件的核心布局小部件。这是一个带有几个附加点的简单容器。(我没有包含 HTML,因为它非常简单)
define("my/Dialog",[
"dojo/_base/declare",
"dijit/_WidgetBase",
"dijit/_TemplatedMixin",
"dijit/_WidgetsInTemplateMixin",
"dojo/ready",
"dojo/parser",
"dojo/text!./Dialog.html"], function(declare, _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, ready, parser, template){
return declare([_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin], {
templateString: template,
widgetsInTemplate: true,
title: 'Dialog',
content: null,
constructor: function(args){
},
postCreate: function(){
this.inherited(arguments);
},
///
/// Getters / Setters
///
_setTitleAttr: function(title){
},
_setContentAttr: function(content){
this._contentPane.innerHTML = content;
}
});
ready(function(){
parser.parse();
});});
然后我想创建另一个模板化对话框,它将继承自这个对话框,并且基本上将其扩展为将模板注入到my/Dialog的内容中
define("my/BookmarksDialog",[
"dojo/_base/declare",
"dijit/_WidgetBase",
"dijit/_TemplatedMixin",
"dijit/_WidgetsInTemplateMixin",
"dojo/ready",
"dojo/parser",
"my/Dialog"], function(declare, _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, ready, parser, Dialog){
return declare([Dialog, _WidgetsInTemplateMixin], {
//templateString: template,
template: '<div data-dojo-attach-point="bookmarkpoint">something</div>',
widgetsInTemplate: true,
content: template, // This works but doesn't parse the widgets within
title: 'Bookmarks',
constructor: function(args){
},
postCreate: function(){
this.inherited(arguments);
}
});
ready(function(){
parser.parse();
});});
我面临的问题是BookmarkDialog无法访问名为bookmarkpoint的附加点
所以问题是:如何让 BookmarkDialog 模板被解析并放置在 Dialog 小部件中?
选项:
- 将 Dialog 小部件的模板复制到 BookmarkWidget 并不是一个真正的选择,
- 在 BookmarkWidget 模板中实例化 Dialog 也不是什么好选择,因为我不希望 Dialog 位于附加点下。我必须将 Dialog 的所有方法包装到 BookmarkDialog 中才能正确传播。
请注意,我也在实例化小部件时触发了.startup()。谢谢