问题描述
dojo中的 registry.byId
和 dom.byId
有什么区别?使用 registry.byId
的优点是什么?
在下面的代码中,我使用<$ c $我的文本框(#myTextBox3
)中的c> dijit / registry 和 dojo / dom
和我的文本框节点(#textNode3
)。只有两个提供结果。
require([dojo / parser,dojo / dom,dijit / registry,dijit / form / TextBox,dojo / domReady!],
函数(parser,dom,registry){
parser.parse ();
//找到JS对象
var dibiWidget = registry.byId(myTextBox3);
var dobiWidget = dom.byId(myTextBox3);
var dibiDOM = registry.byId(textNode3);
var dobiDOM = dom.byId(textNode3);
dom.byId(textNode3 ).innerHTML =返回的小部件ID的registry.byId:+ dibiWidget +< br>+
返回的小部件ID的dom.byId:+ dobiWidget +< br>
返回的dom id的register.byId:+ dibiDOM +< br>+
返回的dom id的dom.byId:+ dobiDOM +< br>;
});
这些模块有不同的用法。所以没有使用 registry.byId()
(或 dom.byId()
)的优点,因为它们有所不同使用案例
dijit / registry :: byId()
dijit /注册表
模块主要用于检索小部件实例。引用:
dijit /注册表存储
页面中所有dijit小部件的集合。通常用于从
相关数据中检索对小部件的引用
dojo / dom :: byId ()
另一方面, dojo / dom
模块只是一个访问DOM节点的模块。在:
这是什么意思?
registry.byId()
函数将返回您的窗口小部件的一个实例。这包含了widget / getter和widget的其他东西。该模块应该仅用于检索小部件,您无法获取DOM节点。
dom。另一方面,byId()
函数将返回匹配的DOM节点。您只能使用它来检索DOM节点。一个窗口小部件显然还包含DOM节点,但是您不应该直接访问窗口小部件的DOM节点,因为它们是窗口小部件的内部结构的一部分(可能会改变)。
访问窗口小部件始终使用 registry.byId()
。它提供API来访问大多数DOM属性。
您的代码
所以你的代码在这里展示了4种可能性。假设
#myTextBox3
是一个小部件(例如,类型为 dijit / form / TextBox
)和 #textNode3
是一个DOM节点,将会发生以下情况: -
dibiWidget
将工作,因为
#myTextBox3
是一个小部件。它将返回对该小部件的引用 -
dobiWidget
将可能工作,因为有一个DOM节点在每个具有相同ID的小部件后面(不需要)。但是,正如我刚刚解释的那样,不要建议使用它。 -
dibiDom
将因为没有ID为$ code>#textNode3 的窗口小部件。这只是一个简单的DOM节点。 -
dobiDom
将返回对DOM节点的引用,并且工作。
我也做了一个小的来证明这一点。
What is the difference between registry.byId
and dom.byId
in dojo? What is the advantage of using registry.byId
?
In the code below I'm using dijit/registry
and dojo/dom
for both my textbox (#myTextBox3
) and my textbox node (#textNode3
). Only two of them are providing results.
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>";
});
These modules have a different usage. So there is no advantage of using registry.byId()
(or dom.byId()
) because they differ in use case.
dijit/registry::byId()
The dijit/registry
module main use is retrieving widget instances. Quoting the reference guide:
dojo/dom::byId()
The dojo/dom
module on the other hand is just a module to access DOM nodes. Quoting the information of byId()
on the reference guide:
What does it mean?
The registry.byId()
function will return an instance of your widget. This contains setters/getters and other stuff from the widget. This module should only be used to retrieve widgets, you cannot get a DOM node with it.
The dom.byId()
function on the other hand will return the matching DOM node. You can only use it to retrieve a DOM node. A widget obviously also contains DOM nodes, but you should never directly access the DOM nodes of a widget because they're part of the internal structure of the widget (and may change).
When accessing a widget, always use registry.byId()
. It provides APIs to access most DOM properties anyways.
Your code
So, your code demonstrates the 4 possibilities here. Assuming #myTextBox3
is a widget (for example of type dijit/form/TextBox
) and #textNode3
is a DOM node, the following will happen:
dibiWidget
will work because#myTextBox3
is a widget. It will return a reference to that widgetdobiWidget
will probably work, because there is a DOM node behind every widget with the same ID (not required though). However, like I just explained, it's not recommended to use it.dibiDom
will not work because there is no widget with ID#textNode3
. This is just a simple DOM node.dobiDom
will return a reference to the DOM node and will work.
I also made a small JSFiddle to demonstrate this.
这篇关于dojo中的registry.byId和dom.byId之间的区别?使用registry.byId有什么优势?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!