本文介绍了dojo中的registry.byId和dom.byId之间的区别?使用registry.byId有什么优势?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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 widget
  • dobiWidget 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有什么优势?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-24 19:52