2011-07-08 36 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部分。