場景:最近需要在動態生成dojo widget,但是與以前不同的是,新建的這幾個dojo widget是在一個dijit.layout.BorderContainer下層,包含一些只有container dojoType的region屬性。
具體實現方案:
- var cR=dijit.byId("cR");
- var ns=new ntms.s.SN();
- ns.attr("region", "top");
- ns.attr("class","s_n");
- cR.addChild(ns);
- cR.startup();
解釋如下:
1,第一行,注意需要使用dijit.byId()來取得dijit實體,不能使用dojo.byId().在 Dojo 體系中,如果想通過 Dijit 的 id 來獲得 Dijit 實體,只能通過 dijit.byId()。而作用與 document.getElementById() 相同的 dojo.byId(),無法獲得任何 Dijit 實體。
2,第二行,創建自定義的dijit實體。這是獲得dijit實體的第二種方法。
3,第三行,第四行,設置dijit實體的屬性,包括borderContainer的region屬性,還有對應的css值。
4,第五行,添加該dijit實體到已有節點下面。
5,第六行,最重要的一行代碼,啓動上層digit實體的startup()函數進行解析。如果啓動ns.startup()則不能解析出上層的region屬性。
--------------------------------------------------------------------
這種場景在我們使用dojo進行客戶端應用時,爲加快啓動速度,延遲加載一些dojoType類型的tag。
如果是靜態創建dojoType的widget,則很容易。
如果使用靜態方式動態創建widget,則這種場景不能實現,因爲使用dojo.parser.parse()不能進行重新分析上層節點。
只好使用這種動態創建方式。