有什么区别registry.byId
and dom.byId
在道场?使用有什么好处registry.byId
?
在下面的代码中我使用dijit/registry
and dojo/dom
对于我的两个文本框(#myTextBox3
)和我的文本框节点(#textNode3
)。其中只有两个提供结果。
require(["dojo/parser", "dojo/dom", "dijit/registry", "dijit/form/TextBox", "dojo/domReady!"],
function(parser, dom, registry) {
parser.parse();
// Locate the JS object.
var dibiWidget = registry.byId("myTextBox3");
var dobiWidget = dom.byId("myTextBox3");
var dibiDOM = registry.byId("textNode3");
var dobiDOM = dom.byId("textNode3");
dom.byId("textNode3").innerHTML = "registry.byId for widget id returned: " + dibiWidget + "<br>" +
"dom.byId for widget id returned: " + dobiWidget + "<br>" +
"registry.byId for dom id returned: " + dibiDOM + "<br>" +
"dom.byId for dom id returned: " + dobiDOM + "<br>";
});
这些模块有不同的用途。所以使用没有任何优势registry.byId()
(or dom.byId()
)因为它们的用例不同。
dijit/注册表::byId()
The dijit/registry
模块主要用途是检索widget实例。引用参考指南 http://dojotoolkit.org/reference-guide/dijit/registry.html:
dijit/registry 将所有 dijit 小部件存储在一个
页。它通常用于从 a 中检索对小部件的引用
相关数据
道场/dom::byId()
The dojo/dom
另一方面, module 只是一个访问 DOM 节点的模块。引用以下资料byId()
on the 参考指南 http://dojotoolkit.org/reference-guide/dojo/dom.html:
这是一个简单的别名document.getElementById
,这不仅是
写起来比较短,但幸运的是适用于所有浏览器。它变成了一个
domNode 通过Id 引用某个Node,或者如果是相同的节点引用
传递了一个 domNode。
这是什么意思?
The registry.byId()
函数将返回您的小部件的实例。它包含小部件中的设置器/获取器和其他内容。该模块应该only用于检索小部件,但无法使用它获取 DOM 节点。
The dom.byId()
另一方面,函数将返回匹配的 DOM 节点。您只能使用它来检索 DOM 节点。一个小部件显然也包含 DOM 节点,但您永远不应该直接访问小部件的 DOM 节点,因为它们是小部件内部结构的一部分(并且可能会发生变化)。
当访问小部件时,always use registry.byId()
。它提供了 API 来访问大多数 DOM 属性。
你的代码
因此,您的代码在这里演示了 4 种可能性。假设#myTextBox3
是一个小部件(例如类型dijit/form/TextBox
) and #textNode3
是一个 DOM 节点,会发生以下情况:
-
dibiWidget
will work因为#myTextBox3
是一个小部件。它将返回对该小部件的引用
-
dobiWidget
will 可能有效,因为每个小部件后面都有一个具有相同 ID 的 DOM 节点(尽管不是必需的)。然而,就像我刚才解释的那样,不建议使用它。
-
dibiDom
will not work因为没有带 ID 的小部件#textNode3
。这只是一个简单的 DOM 节点。
-
dobiDom
将返回对 DOM 节点的引用并且将work.
我也做了一个小JSFiddle http://jsfiddle.net/VE5gn/来证明这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)