我需要在初始化新窗口小部件时将自定义窗口小部件添加到特定div。
我认为最标准的方法是使用链接
(new MyFirstWidget()).placeAt('myDiv');
我对这种方法并不是很热心,因为它需要在每次初始化时placeAt()
的详细信息,在我的情况下,我需要强制将这种类型的小部件一直嵌套在特定的div中。
相反,我想在widget类中添加此信息。
目前我正在使用以下代码,在placeAt()
中使用postCreate()
工作正常。
我想知道:
postCreate()
是正确的地方吗?可以添加到更好的点
在小部件生命周期中?this.placeAt()
小部件中调用postCreate()
之前标记为rendered
,实际上已经
尚未渲染,因为尚未添加到DOM中......为什么
那是吗? define([
'dojo/_base/declare',
'dojo/dom-construct',
'dijit/_WidgetBase',
'dijit/_TemplatedMixin',
'dojo/text!./templates/PanelBasic.html'
], function (
declare,
domConstruct,
_WidgetBase,
_TemplatedMixin,
template
) {
'use strict';
var attachTo = 'myPanels';
return declare([_WidgetBase, _TemplatedMixin], {
templateString: template,
ntvType: 'Panel',
constructor: function () {
},
postCreate: function () {
this.inherited(arguments);
this.placeAt(attachTo);
}
});
});
答案 0 :(得分:1)
postCreate
似乎是生命周期中的适当点。你可能不想忘记先打电话给this.inherited(arguments)
。
_rendered
标志位于dijit/_TemplatedMixin
的内部,并在buildRendering
运行后设置为true,负责从小部件的模板创建DOM元素。从这个意义上说,它已经被渲染了#34; (从模板字符串到DOM),虽然它还没有在文档流中。