【问题标题】:Dojo Nested Widgets - Cannot use dom.byId or queryDojo 嵌套小部件 - 无法使用 dom.byId 或查询
【发布时间】:2013-09-19 13:15:04
【问题描述】:

我有两个使用 dojo 创建的自定义小部件,widgetAwidgetB

widgetA 中加载widgetBwidgetA 包含widgetB),然后dom.byID("id")query("#id") 不会在子窗口小部件上返回任何内容。

widget A. 加载widgetB 时也会发生同样的情况注意,当单独实例化每个小部件(非嵌套)时,两个函数都按预期工作。

这是道场问题吗?

在创建后:

  var button = domConstruct.create("button", { innerHTML: "my button", id: "btnSelect" }, "placeholder");

嵌套小部件时找不到“placeholder”元素。

html

<div id="placeholder"></div>

【问题讨论】:

  • 如果您提供jsfiddle 或类似信息,我相信您会获得更多帮助。从这个描述很难想象你的情况。

标签: dojo widget nested


【解决方案1】:

我认为在小部件中使用 ID 不是一个好习惯,而且您可以直接从小部件 A 访问 DOM 节点到小部件 B,而无需在小部件 B 中提供 decend API。

您的 ID 应该被移除(如果您在一个页面上使用了两次小部件,您会怎么做?)并改用附加点。

如果您在第一个小部件中定义以下 HTML:

<div data-dojo-attach-point="placeholderNode"></div>

然后,您可以使用this.placeholderNode 从同一个小部件访问您的 DOM 节点。您还可以通过使用 myOtherWidget.placeholderNode 引用它来从其他小部件访问它。

但就像@xyu 所说,请提供一个完整的示例,说明您如何从 widgetA 创建 widgetB。

【讨论】:

    【解决方案2】:

    找不到占位符 div 的原因是在 postCreate 函数期间它没有被添加到 dom 中。如果您尝试在启动功能期间创建按钮,它应该可以工作,因为此时小部件的 html 已添加到 dom。

    但是,我不建议这样做。正如 Dimitri 建议的那样,使用 attachPoints 而不是 ID。

    【讨论】:

    • 嗨,我无法添加附加点,因为我正在以编程方式创建各种 div 元素并稍后在代码中访问它们。为了防止有重复的 id,我为每个新小部件生成一个 guid,并将其附加到每个 div 元素的末尾(即 placeholderXXXX)
    • 您确实需要编辑您的问题以包含更多信息。您可以将按钮创建代码移动到启动函数中,也可以在创建时保留对占位符 div 的引用。如果没有更多信息,很难说最好的方法是什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2019-05-08
    • 2011-04-23
    • 1970-01-01
    相关资源
    最近更新 更多