我在将HTML标记解析为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上工作呢?
由于
答案 0 :(得分: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,我推荐How this
works中的Javascript garden部分。