2015-10-16 33 views
0

我需要在初始化一個新小工具的任何時候爲特定的div添加一個自定義小部件。在特定節點上附加一個小工具

我相信最標準的方式是使用一些鏈接

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

我不是真的熱衷這種方法,因爲它需要placeAt()細節在每個初始化,並在我的情況,我需要給力的是小部件類型一直嵌套在特定的div中。

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

目前我使用的是後面的代碼,在postCreate()中使用placeAt()工作正常。

我想知道:

  1. postCreate()正確的地方?在小部件生命週期中可以在更好的點 添加?
  2. 我已經注意到,在postCreate()控件調用this.placeAt()之前被標記爲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的內部,並在buildRendering運行後設置爲true,該標誌負責從窗口小部件的模板創建DOM元素。從這個意義上說,它已經被「渲染」(從模板字符串到DOM),儘管它尚未處於文檔流程中。

+0

感謝您的回答,我添加了我的問題提到this.inherited() – GibboK

+0

有用的文章https://dojotoolkit.org/documentation/tutorials/1.6/declare/ – GibboK

+0

只是一個簡短的問題,不相關,它通常是在costructor()和this.preamble()中使用this.inherited(arguments)?感謝您的時間。 – GibboK

相關問題