我有一个页面,当用户点击某些报告工具的链接时,它会首先要求他们输入一些报告参数。我根据链接的ID使用AJAX将参数对话框作为表单。每个对话框都有一些dojo控件,因此我需要在对话框出现时解析它们,因为它最初不是页面的一部分。
调用时的第一个对话框工作正常,但后续调用对话框无法解析dojo控件。
示例:
showParametersDialog : function(doc) {
var content = doc.firstChild.firstChild.data;
var container = document.createElement('div');
container.id = 'dialog';
container.innerHTML = content;
container.style.background = 'transparent';
container.style.position = 'absolute';
container.style.top = (document.body.clientHeight / 2) - 124 + "px";
container.style.left = (document.body.clientWidth / 2) - 133 + "px";
container.style.display = 'block';
document.body.appendChild(container);
// set up date fields
var date_from = dojo.byId('date_from');
var date_to = dojo.byId('date_to');
try {
date_from.value = dojo.date.locale.format(new Date(), {selector: 'date'});
date_to.value = dojo.date.locale.format(new Date(), {selector: 'date'});
} catch(e) {
var now = new Date();
date_from.value = String(now.getMonth() + "/" + now.getDate() + "/" + now.getFullYear());
date_to.value = String(now.getMonth() + "/" + now.getDate() + "/" + now.getFullYear());
}
dojo.parser.parse();
}
所有对话框都有公共日期字段。 因此,当我第一次调用此对话框并调用dojo.parser.parse()时,它会解析对话框中的控件,但只是第一次...之后,没有dojo。
有什么想法吗?
谢谢, 保罗。
答案 0 :(得分:1)
您可以使用
dojo.parser.instantiate([dojo.byId("myDiv")]);
而不是dojo.parser.parse(); 在所有未解析的对象上使用它。
更多相关信息,请点击此处:
答案 1 :(得分:0)
并不是它不是第二次解析,而是如果dojo尝试不止一次解析某些东西,它就会失败。您可以使用布尔标记跟踪它是否已经被解析,如果没有,则跳过解析它的行。
if (!parsed)
{
dojo.parser.parse();
}
答案 2 :(得分:0)
这可能是因为您错过了dojo.parser.parse(container)
之类的内容。否则,它可能会尝试解析整个文档并找到已解析的元素并停止。
(从旧的道场知识中抽出疯狂猜测)