在特定节点上附加小部件

Attaching a Widget at a specific node

本文关键字:小部 节点      更新时间:2023-09-26
每当

初始化新小部件时,我都需要向特定div 添加一个自定义小部件。

我相信最标准的方法是使用某些链接

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

我对这种方法并不热衷,因为它在每次初始化时都需要placeAt()的详细信息,就我而言,我需要强制这种类型的小部件始终嵌套在特定div 中。

相反,我想在小部件类中添加此信息。

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

我想知道:

  1. postCreate()是正确的地方吗?可以添加到更好的点在小部件生命周期中?
  2. 我注意到在调用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);
            }
        });
    });

postCreate似乎是生命周期中合适的时间点。 不过,您可能不想忘记先打电话给this.inherited(arguments)

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