2011-07-08 38 views
2

我遇到了將HTML標記解析爲Dojo窗口小部件的問題。這是我在做什麼:Dojo內容窗格/選項卡解析問題

var tab = new dijit.layout.ContentPane({ 
    title: "xyz", 
    parseOnLoad: false, //I am doing this intentionally 
    href: "some-relative-url" 
}); 

tabPane.addChild(tab); 

現在,如果我測試這與parseOnLoad = true,我得到我的小部件很好地加載。但是,我試圖在將它轉換爲小部件之前處理HTML。所以我通過添加parseOnLoad:false選項來延遲解析。我綁定的函數被調用時,我的標籤被加載(即Ajax調用完成),像這樣的:

dojo.connect (tab, "onDownloadEnd", myFunction); 

function myFunction() { 

    //manipulate the HTML code via this.content 
    dojo.parser.parse(this); //this doesn't do anything. I tried many variations! 
} 

,當我做到這一點的是,我最終加載的標籤,但沒有小部件會發生什麼,只是標準的HTML控件。那麼爲什麼不在這種情況下觸發解析器,我能做些什麼來使它在我操作的HTML上工作?

感謝

+2

我不確定myFunction中的'this'是否是一個DOM節點,我認爲它必須用於'parse()'做任何事情。嘗試'dojo.parser.parse(this.get(「domNode」));' – Frode

+1

有趣的是,我只是嘗試類似的東西,它的工作,但沒有足夠的聲譽來回答我自己的問題,所以我只能使用現在評論這裏。這對我有用:dojo.parser.parse(this.domNode); – Ayyoudy

回答

2

this在這方面可能是window對象,因爲你沒有具體的connect(從您發佈的代碼,我認爲myFunction()是一個免費的功能,而不是一個方法。

設置範圍

你需要傳遞dojo.parser.parse DOM節點。假設tab是一個小部件,你可以使用dojo.parser.parse(tab.domNode)如果函數中的tab可用性上下文中定義。如果this的作用範圍是標籤窗口小部件,那麼你可以使用dojo.parser.parse(this.domNode)正如你在評論中所說的那樣。

你可以強制與全能的強大dojo.hitch範圍:)閱讀文檔here,我建議從Javascript gardenHow this works部分。