在特定节点上附加Widget

时间:2015-10-16 09:08:10

标签: javascript dojo

我需要在初始化新窗口小部件时将自定义窗口小部件添加到特定div。

我认为最标准的方法是使用链接

 (new MyFirstWidget()).placeAt('myDiv');

我对这种方法并不是很热心,因为它需要在每次初始化时placeAt()的详细信息,在我的情况下,我需要强制将这种类型的小部件一直嵌套在特定的div中。

相反,我想在widget类中添加此信息。

目前我正在使用以下代码,在placeAt()中使用postCreate()工作正常。

我想知道:

  1. postCreate()是正确的地方吗?可以添加到更好的点 在小部件生命周期中?
  2. 我注意到在this.placeAt()小部件中调用postCreate()之前标记为rendered,实际上已经 尚未渲染,因为尚未添加到DOM中......为什么 那是吗?
  3.   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);
                }
            });
        });
    

1 个答案:

答案 0 :(得分:1)

postCreate似乎是生命周期中的适当点。你可能不想忘记先打电话给this.inherited(arguments)

_rendered标志位于dijit/_TemplatedMixin的内部,并在buildRendering运行后设置为true,负责从小部件的模板创建DOM元素。从这个意义上说,它已经被渲染了#34; (从模板字符串到DOM),虽然它还没有在文档流中。