2013-12-08 105 views
0

我是DOJO的新手。我有一個自定義小部件,它使用對話框內容的模板文件。 我在腳本文件中擴展dijit.Dialog。DOJO自定義對話框 - 不解析模板文件

dojo.declare(
    "custom.credentials", 
    [dijit._WidgetBase, dijit._Templated,dijit._WidgetsInTemplateMixin,**dijit.Dialog**], 
    { 


      templatePath: dojo.moduleUrl("custom", "templates/credentials.html"), 
      .... 
      .... 
      postCreate: function() { 

      this.inherited(arguments); 
      alert(this.containerNode); 
      alert(this.mainDIV); 
      }, 
      }); 

我的模板測試文件看起來像這樣

<div data-dojo-attach-point="mainDIV"> 
    Login Dialog Box template here 
</div> 

出於某種原因,當我在this.mainDIV提醒,我得到 '未定義'。它不讀取模板文件。另外,this.containerNode給了我'HTMLDIVElement',(parent dijit dialog DIV)。

經過大量的試驗錯誤後,我無法弄清楚問題出在哪裏。任何幫助將不勝感激。

調用代碼

function opnPop(){ 
var pop= dijit.byId("customPopup"); 
    pop.show(); 
} 

<div dojoType="custom.credentials" id="customPopup"/> 

注: * 當dijit.Dialog是擴展 *讀取沒有任何問題的模板文件,即我能夠訪問此。 mainDIV.innerHTML,它包含我自己的內部html內容。

謝謝。

回答

0

如果Dialog必須被分類,那麼它必須是基類。在這裏,它似乎被用作mixin。無論如何,問題出在使用的模板上。 該模板將被解析並由Dialog中的代碼使用。所以,這裏提到的模板只有一個帶有連接點的div元素。沒有「containerNode」元素(即連接點),並且您試圖在您的js代碼中訪問它,這會導致錯誤。

更重要的是,「標題欄的」 &「titleNode」元素也缺少表單模板,在分析模板,這將給錯誤。爲了避免這種情況,使用這些元素的代碼部分需要從js中刪除,以避免錯誤。所以小部件的創建將會成功。嘗試使用標準的dijit.Dialog的模板。 將data-dojo-attach-point="mainDIV"添加到模板中頂層的Dialog's div。 在模板中,可以添加更多的東西,這不會導致任何問題。但是,如果取下任何東西,都會導致問題。如果我們對一個類/小部件進行子分類,我們需要遵守現有的代碼。

+0

嗨Vivek。我複製粘貼了dijit對話框模板,並在裏面添加了我的自定義標記。 Tt工作!謝謝 :) – Malathi