我是DOJO的新手。我有一个自定义小部件,它使用模板文件作为对话框内容。 我正在脚本文件中扩展dijit.Dialog。
dojo.declare(
"custom.credentials",
[dijit._WidgetBase, dijit._Templated,dijit._WidgetsInTemplateMixin,**dijit.Dialog**],
{
templatePath: dojo.moduleUrl("custom", "templates/credentials.html"),
....
....
postCreate: function() {
this.inherited(arguments);
alert(this.containerNode);
alert(this.mainDIV);
},
});
我的模板测试文件如下所示
<div data-dojo-attach-point="mainDIV">
Login Dialog Box template here
</div>
出于某种原因,当我在 this.mainDIV 上发出警报时,我得到了“未定义的”#39;。它不读取模板文件。另外,this.containerNode给了我&#39; HTMLDIVElement&#39;,(父dijit对话框DIV)。
在很多试验错误之后,我无法弄明白问题究竟是什么。任何帮助将不胜感激。
致电代码
function opnPop(){
var pop= dijit.byId("customPopup");
pop.show();
}
<div dojoType="custom.credentials" id="customPopup"/>
注意: * 当dijit.Dialog 不扩展 *时,它会毫无问题地读取模板文件,即我能够访问this.mainDIV.innerHTML,它包含我自己的内部html内容。
谢谢。
答案 0 :(得分:0)
如果必须对Dialog进行细分,那么它必须是基类。在这里,似乎它被用作mixin。无论如何,问题在于使用的模板。 该对话框中的代码将解析和使用该模板。所以,这里提到的模板只有一个带连接点的div元素。没有“ containerNode ”元素(即附加点),并且您尝试在js代码中访问它,这将产生错误。
更重要的是,“ titleBar ”&amp; “ titleNode ”元素也缺少表单模板,这会在解析模板时出错。为了避免这种情况,需要从js中删除使用这些元素的代码部分,以避免错误。因此,小部件创建将是成功的。尝试使用标准的dijit.Dialog模板。
将data-dojo-attach-point="mainDIV"
添加到模板中顶级对话框的div。
在模板中,可以添加更多内容,这不会导致任何问题。但是,如果删除任何东西,都会造成问题。如果我们对类/小部件进行子类化,我们需要遵守现有的代码。