2015-10-16 6 views
0

Мне нужно добавить пользовательский виджет к конкретному div в любое время, когда я инициализирую новый виджет.Присоединение виджета к определенному узлу

Я считаю, что самый стандартный способ будет использовать что-то ссылку

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

Я на самом деле не в восторге от такого подхода, поскольку он требует детали для placeAt() в каждой инициализации, и в моем случае, мне нужно, чтобы заставить что тип виджета, который будет вложен в конкретный div все время.

Вместо этого я хотел бы добавить эту информацию в класс виджетов.

В настоящий момент я использую следующий код, используя placeAt() в postCreate() работает отлично.

Я хотел бы знать:

  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); 
      } 
     }); 
    }); 

ответ

1

postCreate кажется, соответствующей точке жизненного цикла для этого. Вероятно, вы не хотите забывать позвонить в this.inherited(arguments).

Флаг _rendered является внутренним по отношению к dijit/_TemplatedMixin и установлен в значение true после запуска buildRendering, который отвечает за создание элементов DOM из шаблона виджета. В этом смысле она была «оказана» (от строки шаблона до DOM), хотя она еще не в потоке документов.

+0

Спасибо за ваш ответ, я добавил свой вопрос, отметив this.inherited() – GibboK

+0

Полезная статья https://dojotoolkit.org/documentation/tutorials/1.6/declare/ – GibboK

+0

Просто быстрый вопрос, не связанный, обычно используйте this.inherited (arguments) в costructor() и в this.preamble()? Спасибо за ваше время. – GibboK

Смежные вопросы