dojo中registry.byId和dom.byId的区别?使用registry.byId有什么好处?

2024-01-23

有什么区别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(使用前将#替换为@)

dojo中registry.byId和dom.byId的区别?使用registry.byId有什么好处? 的相关文章

  • dojox.CheckedMultiSelect 的值未与 dojo.xhrPost 一起发布

    当我使用发布表单时dojo xhrPost 我得到了表单中的所有字段 除了 dojox Checked MultiSelect 的值 无论选择什么选项 我的 CheckedMultiSelect 的声明 div div
  • 使用 ArcGIS JS API 的 dojo 解析器和 TypeError

    我收到此错误 类型错误 未定义 不是函数 评估 parser parse 这是我的代码
  • 如何检查dojo.datagrid加载完成? [复制]

    这个问题在这里已经有答案了 我的其中一个页面中有一个 dojo datagrid Datagrid 及其存储 通过调用 URL 是通过声明性方法创建的 不是通过动态 程序化 我需要执行一个 javascript 方法 该方法在我的数据网格下
  • 如何“获取”dijit.layout.tabcontainer 中“单击”选项卡的 ID?

    我一直无法为此找到明确定义的解决方案 大多数都是不完整的片段 这是一个简单的示例 请参阅 doSomething 注释
  • 更改 DOJO 小部件的默认样式

    我希望能够更改一些默认的 CSS 样式 例如 dijit TitlePane 而无需破解 工厂安装的 CSS 主题 我想做的是删除Title and 内容外层TitlePane 的边框 在声明小部件时设置一个类 在本例中为 无边框 不起作用
  • 动态改变约束

    我有一个 dijit form NumberTextBox 输入字段 以这些参数开头 new dijit form NumberTextBox id din1 style width 60px constraints places 0 pa
  • 从 AOL 加载 Dojo 库并从本地加载 Widget 代码?

    我刚刚开始学习Dojo 我遵循一个站点 Widget 示例 使用一些不同的方法来加载 Dojo 库 我喜欢使用 AOL 参考来加载 dojo js 如下所示 并将我的小部件代码保存在本地网络服务器中 如下所示 scripts myWidge
  • dojo 1.7 AMD 框架有什么好处?

    我一直在阅读有关 dojo 1 7 加载程序如何使用 AMD API 框架的内容here http dojotoolkit org blog learn more about amd and here too http livedocs d
  • 如何使用Dojo动态添加div?

    我有以下静态 div div div 我想使用 dojo 在 div1 中动态添加一个 id 为 div1 1 的 div 我该怎么做 您可以仅使用 Dojo Base 来完成此操作 如果您使用 trunk 或 Dojo 1 3 则无需包含
  • 将搜索微件添加到 ArcGIS Shortlist Story 应用程序时遇到问题

    我在将搜索小部件添加到候选列表应用程序时遇到问题 我已经包含了下面的代码 搜索栏显示 但不起作用 我需要将其放在可以搜索应用程序中包含的公司名称的位置
  • 从用户硬盘浏览并选择文件在 IE 中给出未定义

    当我使用输入按钮浏览用户计算机上的文件时 它适用于 FF IE9 和 Chrome 但是当我将文件传递给 IE9 中的 JS 函数时 我得到了未定义的结果 而它在 FF 和 Chrome 中工作得很好
  • 使用 Dojo 从跨域的 ReST 服务检索 XML 数据

    我正在尝试为 ReST 应用程序编写一个基于浏览器的 Javascript 客户端 该应用程序使用 XML 进行响应 所以看来 JSONP 是不可能的 我正在尝试使用检索数据dojo io script get但传递给回调函数的参数是一个对
  • 道场:道场 onblur 事件

    我有一个 dojo 1 5 的表单设置 我正在使用 dijit form ComboBox 和 dijit form TextBox 组合框具有 汽车 自行车 摩托车 等值 文本框是组合框的形容词 因此 组合框中的内容并不重要 但如果组合框
  • 哪些事件附加到元素?

    如何接收附加到元素的所有事件dojo http dojotoolkit org dojo query mydiv which events does mydiv has 获取 DOM 元素上的所有事件 Get my div myDiv do
  • DOJO xhrGet如何使用返回的json对象?

    如何在 get 本身之外访问从 xhrGet 返回的数据 Firebug 显示 json 对象有一个名为 results 的数组 该数组存储响应中的 json 对象 但当我尝试访问它时它为 null 那么 如何访问最后一个代码行接收到的数据
  • Dojo 是否可以与其他 JS 框架结合?

    我们使用 Dojo 1 9 3 作为构建单页面应用程序的 JS 框架 然而 我们在 Dojo 的怪癖上花费了太多时间 因此即使是简单的任务也需要很长时间才能实现 由于缺乏适当的文档 我们经常不得不求助于阅读源代码 然后实施解决方法 我觉得如
  • dojo中tabContainers的高度

    我正在使用 Dojo tabContainer 快速问题 你吗 have to如果您正在处理 Dojo 容器 请在 CSS 中指定小部件大小 以像素为单位 据我所知 让 TabContainer 实际显示的唯一方法是通过 CSS 为其指定绝
  • Dojo require,模块加载失败时连接错误

    当我尝试加载不存在的模块时 它失败并出现 404 错误 当然 我想处理此错误 但不知道如何连接到 错误 事件 根据 Dojo 文档 我应该能够使用它的微事件 API http livedocs dojotoolkit org loader
  • 使用 Dojo 阻止表单提交

    我有一个带有 jsId saveParamButtonWidget 的 Dojo SubmitButton 我通过放置以下内容来重写其 onClick 方法 saveParamButtonWidget onClick editParam 我
  • dojo dijit.form.DateTextBox 约束不起作用,datetextbox

    嗨 我是 javascript 和 dojo 的新手 我正在尝试使用两个带有下拉日历的 dijit DateTextBox 来建立数据库查询的日期范围 一旦选择了开始日期或结束日期 我想限制可用的日期 以便不可能选择按时间顺序排列在开始日期

随机推荐

  • 如何处理“超出最大存储过程、函数、触发器或视图嵌套级别(限制 32)”。

    我被要求创建脚本 希望运行它的人提供员工 ID 找到所提供的员工任意深度监督的所有员工 我的代码是 CREATE FUNCTION dbo GetNames V uniqueidentifier RETURNS OldNames TABLE
  • 为什么 R 的重复数据在排序数据上表现更好?

    在比较答案中两个函数的效率时检查列表是否包含 R 中的另一个列表 https stackoverflow com a 39350733 4408538 我偶然发现了一个有趣的结果 排序大大提高了效率duplicated当向量很大时 这让我感
  • 在 PropertyGrid 中设置只读属性将所有属性设置为只读

    我正在使用一个PropertyGrid控件来编辑我的类属性 并且我尝试根据其他属性设置将某些属性设置为只读 这是我班级的代码 Imports System ComponentModel Imports System Reflection P
  • Redis 和 Node.js 以及 Socket.io 问题

    我刚刚学习 redis 和 node js 有两个问题我找不到任何令人满意的答案 我的第一个问题是关于在 Node js 中重用 Redis 客户端 我找到了这个问题和答案 如何在socket io中重用redis连接 https stac
  • 比较两个数组并找出差异

    我需要比较两个数组并获得差异 背景 第一个数组将列出文件夹中的文件 第二个数组将读取文件的内容并存储在数组中 第一个数组的输出将是 a b c d e 第二个数组的输出将是 a b c e 我如何比较这两个有差异的数组 我想要的最终输出是
  • java数组循环遍历

    我有一个包含 1 2 3 4 5 值的数组 array a 1 2 3 4 5 现在我想以循环方式遍历它 就像我想打印 2 3 4 5 1 或 3 4 5 1 2 或 5 1 2 3 4 等等 任何算法关于这个 Edit 我想以循环方式打印
  • 后台服务科尔多瓦离子应用程序。 Backgroudn 插件无法在 ios 8.3 上运行

    我想实现一个后台服务 将地理位置发送到服务器 因此我使用了插件 cordova plugin background modehttps github com katzer cordova plugin background mode htt
  • asyncio - 重新引发任务异常

    我正在使用 asyncio 进行一些 TCP 通信 我有一个Receive 函数的作用是read 无限循环中 这作为后台任务运行 使用asyncio create task Receive 现在 如果连接被对等方关闭 则会引发异常 或者可能
  • 增强数据结构而不浪费内存

    我有课Tree我想将其扩充为更专业的数据结构 例如Order tree and Interval tree 这些增强功能需要添加Node 例如大小信息 以及对某些算法的微小更改 我想知道在 C 中实现性能 可读性和可维护性方面的增强的最佳方
  • Quickbooks API - 如何使用存储的信用卡创建费用

    我想知道如何使用存储的信用卡创建费用 使用 card api 我已成功将卡存储在 QuickBooks Online 中并收到返回的卡 ID 现在我想对存储的卡进行收费 为了创建费用 我发现有两种提供卡详细信息的方法 提供明确的卡详细信息
  • 变换路径和重绘不起作用

    我有一次创建的路径 并向其中添加了 React 在某些情况下 我将路径偏移Path offset or Path transform 然后使我的画布无效以重新绘制路径 但路径并没有在新的地方重新绘制 我通过使用检查了路径边界Path com
  • 如何在通过curl触发构建时设置Jenkins构建描述?

    我正在尝试设置我正在触发的构建的构建描述 因为我正在启动构建 但到目前为止我还没有运气 我遇到了一个解决方案 将文本添加到 Jenkins 远程 API 触发的构建页面 https stackoverflow com questions 1
  • 在 Linq Select 中创建元组

    我正在使用 C 和 NET Framework 4 5 1 使用 Entity Framework 6 1 3 从 SQL Server 数据库检索数据 我有这个 codes codesRepo SearchFor predicate Se
  • 使用 ParamArray,但需要至少一个参数

    我曾经拥有的 Public Sub Subscribe channel As ChannelType Public Sub Subscribe channels As IEnumerable Of ChannelType 第一个只是调用第二
  • 检测节点何时被删除(或因为父节点被删除而从 DOM 中删除)

    我想检测节点 例如nodeX 何时不再可用 要么是因为它被删除了 要么是因为它的父节点 或其父节点 被删除了 到目前为止 我能想到的就是使用Mutation Observer来查看页面上的任何删除 并检查删除的节点是否是nodeX或有nod
  • #!/usr/bin/python 和#!/usr/bin/env python,哪个支持?

    Python 脚本的 shebang 应该是什么样的 有些人支持 usr bin env python因为它可以智能地找到Python解释器 其他人支持 usr bin python 因为现在在大多数 GNU Linux 发行版中pytho
  • 单处理器环境可以防止竞争条件吗?

    当多个处理器工作时 进程是并发工作的 当多个线程访问某个公共数据区域时 就会发生竞争条件 一个线程可能会覆盖另一个值 那么 如果是单处理器 单核环境 是否可以防止竞争条件的发生呢 帮我解答一下这个困惑 谢谢 单处理器环境中可能会发生竞争条件
  • 多个客户端的异步 TCP 服务器

    我有一个 TCP 服务器 它异步侦听传入连接 如果只有一个客户端连接 则一切正常 但如果有两个或多个连接 服务器不会收到第一条消息 当我调试 ReceiveCallback 函数时 我可以看到服务器获取消息的长度 但没有获取数据 IE 如果
  • 从文件加载矩阵

    我需要读取包含矩阵数据的文件并在程序中创建矩阵 Matrix 文件格式类似于 Matrix made by matblas from blosum62 iij column uses minimum score BLOSUM Cluster
  • dojo中registry.byId和dom.byId的区别?使用registry.byId有什么好处?

    有什么区别registry byId and dom byId在道场 使用有什么好处registry byId 在下面的代码中我使用dijit registry and dojo dom对于我的两个文本框 myTextBox3 和我的文本框