Dojo 嵌套小部件 - 不能使用 dom.byId 或查询



我有两个使用 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"元素。

目录

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

我认为在小部件中使用 ID 不是一个好的做法,你可以直接从小部件 A 访问 DOM 节点到小部件 B,而无需在小部件 B 中提供递减 API。

您的ID应该被删除(如果您在页面上使用小部件两次,该怎么办?)并使用附加点代替。

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

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

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

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

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

但是,我不建议这样做。正如迪米特里所建议的那样,使用附加点而不是 ID。

最新更新