【问题标题】:Dynamic Content Loading - HTML5 is OK, Dojo is not动态内容加载 - HTML5 可以,Dojo 不行
【发布时间】:2016-08-14 01:45:48
【问题描述】:

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

问题似乎在于动态 DIV 中包含的 DIJIT 小部件不是 DIJIT 小部件,而是普通的 HTML 小部件。也就是说,我可以使用“dojo.byId('widgetID')”并使用标准 JavaScript 来处理它们,但如果我尝试“registry('widgetID')”,我会得到“未定义”响应。

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

【问题讨论】:

  • 动态 DIV 中包含的 DIJIT 小部件不是 DIJIT 小部件,请多解释。

标签: parsing dynamic dojo digit


【解决方案1】:

在将标记 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
  });
});

【讨论】:

  • OK.. 让我做一些重写以替换 xhrGet,并弄清楚如何继续前进。看起来您正在解析放置动态内容的节点。因此,如果我当前将所有动态内容添加到同一个节点,我会一遍又一遍地重新解析它。相反,我应该创建某种空占位符吗?
  • 感谢 xhr 的更新,一切正常。解析在一定程度上运行良好。我确实必须先创建一个空的 DIV,然后将动态内容添加到新的 DIV,然后解析它。一切看起来都很好,因为我可以看到它现在不是普通的 HTML 文本框。但是,当我在该字段中键入时,占位符不会消失。如果不是不可能的话,让文本框获得焦点也是很棘手的。有时我根本无法点击该字段。
  • 想通了。它要么全是 DOJO,要么什么都没有。我实际上只是在 innerHTML 中附加动态内容,然后对其进行解析。从表面上看,有效,但导致了上述问题。我改用 domConstruct.place 和魔法!
  • @JMorgan 我很高兴它有帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-29
  • 2011-06-14
  • 2014-02-23
  • 1970-01-01
  • 2020-10-07
  • 1970-01-01
  • 2014-01-22
相关资源
最近更新 更多