将现有节点转换为dijit

时间:2012-08-19 08:56:24

标签: dojo

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

谢谢!

2 个答案:

答案 0 :(得分:0)

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

如果使用标记解析器,

node-hierachy可能会稍微改变,这是设置dojoType时的问题。为避免这种情况,您需要创建一个程序化小部件并将其作为所述DOMNode的子级附加。所以,你基本上有三个选择

  1. 使用dojo config parseOnLoad:true并在source-html中设置dojoType属性
  2. 在运行时,在设置dojoType
  3. 后手动调用节点上的解析器
  4. 在运行时,通过程序化api创建类并使用.placeAt(domNode)
  5. 说,你想要扩展一个带有contentpane布局capeabilities的节点(如果不是布局小部件,不会说innerHTML会发生什么,它取决于每个小部件的markupfactory):

    使用标记解析器方法时:

    <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>
    

答案 1 :(得分:0)

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

var nodeToDigitize = dojo.query('#mynode')[0];
new myDijit({prop1: val1, ...}, nodeToDigitize);