1

将 EXISTING dom 节点(比如我们的 div 元素)转换为给定类的 dijit(保留所有元素属性)的最佳方法是什么?我尝试将节点上的 dojoType 属性设置为给定的 dijit 类,但它似乎不起作用。我正在使用dojo 1.6。

谢谢!

4

2 回答 2

0

在运行时还是作为页面引导程序的一部分(控制 html)?

如果您使用标记解析器,节点层次结构可能会稍有变化,这是在您设置 dojoType 时启动的。为避免这种情况,您需要创建一个程序化小部件并将其附加为所述 DOMNode 的子级。所以,你基本上有三个选择

  1. 使用 dojo 配置 parseOnLoad:true 并在 source-html 中设置 dojoType 属性
  2. 在运行时,在设置 dojoType 后手动调用节点上的解析器
  3. 在运行时,通过编程 api 创建类并使用.placeAt(domNode)

比如说,你想扩展一个具有 contentpane 布局能力的节点(如果不是布局小部件,没有说 innerHTML 会发生什么,它取决于每个小部件的标记工厂):

在使用标记解析器方法时:

<div id="getme" style="background-color:blue">
  Contents
</div>
<script>
  var n = dojo.byId('getme');               n.dojoType="dijit.layout.ContentPane";
  dojo.require("dijit.layout.ContentPane"); dojo.require("dojo.parser");
  dojo.parser.parse(n);
</script>

或程序化方法:

<div id="getme" style="background-color:blue"></div>
<script>
  dojo.require("dijit.layout.ContentPane");
  var w = new dijit.layout.ContentPane({ href: 'ajaxContents.html' });
  w.startup();
  w.placeAt('getme');
</script>
于 2012-08-19T12:59:01.473 回答
0

还有一种简单的方法是将节点传递给 dijit 构造函数:

var nodeToDigitize = dojo.query('#mynode')[0];
new myDijit({prop1: val1, ...}, nodeToDigitize);
于 2012-08-21T19:16:14.083 回答