当前位置: 代码迷 >> GIS >> dojo 学习笔记之一 dom.byId dojo.byId registry.byId 的差异
  详细解决方案

dojo 学习笔记之一 dom.byId dojo.byId registry.byId 的差异

热度:548   发布时间:2016-05-05 06:11:39.0
dojo 学习笔记之一 dom.byId dojo.byId registry.byId 的区别

在dojo中,除了沿用Dom结点, dojo 还自定义了一类结点用“dojoType" 进行标识。

dojo 称这些结点为widget。 当检测到HTMl文档中某个标签定义了dojoType 属性之后,dojo会调用dojo包中相应的 js 及 css 文件对这个结点进行渲染。 从而这个结点元素就会相应地显示出具有dojo特色的样式及功能。

如此说来, dom.byId 跟 dojo.byId 获取到的就是普通的HTMl文档结构树中的某个结点元素,以下简称dom结点, 而 registry.byId 获取到的是一个dojo的widget,以下简称widget结点。

它们的区别之一是 innerHTML, tagName 等方法只对用 dom结点生效。

如果

element =registry.byId("someId"),

element.innerHTML = "some message"

这个命令并不会在页面上显示 "some message" 。


而下面这一句是可以在页面上显示出 “hello world" 的。

dom.byId("someNode").innerHTML = "Hello World";


同样的,有一些命令仅对widget 结点生效,如果用dom结点去用这些命令的话,控制台会提示 “元素为空”类似的错误信息。


有一个很简单的方法可以检查一下是否获取到了想要的结点,如下:

var dijit = registry.byId("testdom");        if(dijit){           alert("yes")}        else{           alert("no")};

参考:

dojotoolkit - registry http://dojotoolkit.org/reference-guide/1.9/dijit/registry.html点击打开链接

dojotoolkit - dojo.byId http://dojotoolkit.org/reference-guide/1.7/dojo/byId.html点击打开链接

dojotoolkit - dom http://dojotoolkit.org/reference-guide/1.8/dojo/dom.html点击打开链接


1楼a912688113昨天 21:34
dom.byId会取代dojo.byId。他俩是等效的。保留dojo.byId是为了兼容之前版本。