0

我有两个使用 dojo 创建的自定义小部件,widgetA并且widgetB.

widgetB从内部widgetAwidgetA包含)加载widgetB,然后dom.byID("id")query("#id")在子小部件上不返回任何内容。

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

这是道场问题吗?

在创建后:

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

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

html

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

2 回答 2

1

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

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

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

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

然后,您可以使用this.placeholderNode. 您还可以通过使用myOtherWidget.placeholderNode.

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

于 2013-09-19T15:18:52.773 回答
0

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

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

于 2013-09-19T15:57:34.380 回答