2013-04-16 61 views
2

我想創建一個Dojo小部件有一個非常簡單的HTML模板:Dojo小部件與模板,小部件的負載變化模板(添加DOM元素)

<div id="contentExternal"></div> 

然後我想要加載某些URL的窗口小部件的負載從外部服務。然後在url加載後,我想把一個與src參數等於這個加載的url。我已經寫:

dojo.provide("dojoModules.ExternalWebsitePane"); 
dojo.require("dijit._Widget"); 
dojo.require("dijit._Templated"); 
dojo.require("dojoModules.ConfigurationPane"); 

dojo.declare("dojoModules.ExternalWebsitePane", [dijit._Widget, dijit._Templated], 
    { 
     templateString: dojo.cache("dojoModules", "templates/ExternalWebsitePane.html"), 
     widgetsInTemplate: false, 
     constructor: function() { 
     } 
     , 
     startup: function() { 
      //Get Config 
      var serviceParams = new Object(); 
      serviceParams.ServiceType = "GetConfig"; 
      ecm.model.Request.invokePluginService("ExternalWebsitePlugin", "ExternalWebsiteService", 
        {requestParams: serviceParams, requestCompleteCallback: function(response) { 
          iframe = new Object(); 
          iframe.src = response.configuration.value; 
          iframe.class = "iframe1"; 
          var content = document.getElementById('contentExternal'); 
          content.appendChild(iframe); 
         }}); 

     } 

    }); 

但在

var content = document.getElementById('contentExternal'); 
content.appendChild(iframe); 

代碼執行失敗,它說,內容爲空。我懷疑HTML模板的div尚未加載。我應該如何添加一個元素?或什麼時候?

回答

1

通常,當您有模板化的小部件時,您應該使用Dojo連接點。如果你有以下模板(例如):

<div data-dojo-attach-point="contentExternalNode"></div> 

然後,您可以訪問節點從屬性與相同的名稱連接點,例如:

this.contentExternalNode.appendChild(iframe); 

我通常這樣做東西在部件的postCreate(我不知道,如果它已經在startup可用)。 有一篇關於編寫自己的小部件的文章(以及關於模板化小部件的更多信息)here

注意:如果您使用Dojo 1.6,則需要使用dojoAttachPoint屬性,而不要使用data-dojo-attach-point