我有两个使用 dojo 创建的自定义小部件,widgetA
和 widgetB
。
从widgetA
内部加载widgetB
(widgetA
包含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。