dojo.parser.parse只在第一次被调用时工作

时间:2009-10-19 19:33:20

标签: dojo

我有一个页面,当用户点击某些报告工具的链接时,它会首先要求他们输入一些报告参数。我根据链接的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。

有什么想法吗?

谢谢, 保罗。

3 个答案:

答案 0 :(得分:1)

您可以使用

dojo.parser.instantiate([dojo.byId("myDiv")]);

而不是dojo.parser.parse(); 在所有未解析的对象上使用它。

更多相关信息,请点击此处:

http://livedocs.dojotoolkit.org/dojo/parser

答案 1 :(得分:0)

并不是它不是第二次解析,而是如果dojo尝试不止一次解析某些东西,它就会失败。您可以使用布尔标记跟踪它是否已经被解析,如果没有,则跳过解析它的行。

if (!parsed)
{
    dojo.parser.parse();
}

答案 2 :(得分:0)

这可能是因为您错过了dojo.parser.parse(container)之类的内容。否则,它可能会尝试解析整个文档并找到已解析的元素并停止。

(从旧的道场知识中抽出疯狂猜测)