Parsing 动态内容加载-HTML5正常,Dojo不正常

Parsing 动态内容加载-HTML5正常,Dojo不正常,parsing,dynamic,dojo,digit,Parsing,Dynamic,Dojo,Digit,在这种情况下,我使用dojo.xhrGet从服务器动态加载DIV。一切都很好。内容恢复正常,DIV插入页面正常。请注意,在这种情况下,我无法在发生其他事件之前知道要加载的DIV 问题似乎在于动态div中包含的DIJIT小部件不是DIJIT小部件,而是普通的HTML小部件。也就是说,我可以使用dojo.byId'widgetID'和标准JavaScript处理它们,但如果我尝试使用注册表'widgetID',我会得到一个未定义的响应 如何将动态加载的声明性DIV代码解析为真正的DIJIT小部件?将

在这种情况下,我使用dojo.xhrGet从服务器动态加载DIV。一切都很好。内容恢复正常,DIV插入页面正常。请注意,在这种情况下,我无法在发生其他事件之前知道要加载的DIV

问题似乎在于动态div中包含的DIJIT小部件不是DIJIT小部件,而是普通的HTML小部件。也就是说,我可以使用dojo.byId'widgetID'和标准JavaScript处理它们,但如果我尝试使用注册表'widgetID',我会得到一个未定义的响应

如何将动态加载的声明性DIV代码解析为真正的DIJIT小部件?

将标记DIV加载到DOM后,需要使用dojo/parser。 如果标记被正确修饰,parse函数将把HTML标记从div转换为dijit小部件

顺便说一句,dojo.xhrGet已被弃用,您应该改用dojo/request/xhr

下面是一些伪代码的示例:

require(["dojo/request/xhr", "dojo/dom-construct"], function(xhr, domConstruct){
  xhr("example.json", {
    handleAs: "text" // or whatever
  }).then(function(data){
    // place your div to the dom (data is an html markup similar to this <input data-dojo-type="dijit/form/TextBox" type="text" name="dept1" />)
    var targetDom = 'targedDom';
    domConstruct.place(data, targetDom, 'replace');
    // trasform your div to a dijit widget 
    parser.parse(dojo.byId(targetDom)).then(function(){
        // after is parsed do smt here
    });

  }, function(err){
    // handle the error condition
  }, function(evt){
    // handle a progress event from the request if the browser supports XHR2
  });
});

动态div中包含的DIJIT小部件不是DIJIT小部件,请解释更多。好的。。让我做一些重写来替换xhrGet,并找出如何继续前进。看起来您正在解析放置动态内容的节点。因此,如果我当前正在将所有动态内容添加到同一个节点,我将一遍又一遍地重新解析它。相反,我应该创建某种类型的空占位符吗?感谢xhr的更新,这很好。解析在一定程度上工作正常。我确实需要先创建一个空DIV,然后将动态内容添加到新DIV中,然后解析它。所有这些看起来都很好,因为我可以看到它现在不是一个普通的HTML文本框。但是,当我在字段中键入时,占位符并没有消失。要让文本框接收焦点,即使不是不可能,也是很棘手的。有时候我就是无法点击进入这个领域。我明白了。要么全是道场,要么什么都不是。我实际上只是在innerHTML中添加动态内容,然后对其进行解析。从表面上看,这是有效的,但造成了上述问题。我转而使用domConstruct.place和magic@我很高兴它帮助了我: