【发布时间】:2014-05-21 15:04:20
【问题描述】:
我在编写自己的小部件时遇到了一些麻烦。我创建了一个继承自 _WidgetBase、_TemplatedMixin 和 _WidgetsInTemplateMixin 的小部件(因为我也在尝试构建一个 UI,其中小部件将包含其他小部件)。我正在使用 dojo/text 从模板加载小部件的标记。这是一个sn-p:
define([
"dojo/_base/declare",
"dijit/_WidgetBase",
"dijit/_TemplatedMixin",
"dijit/_WidgetsInTemplateMixin",
"dojo/text!./templates/LayerManagerWidget.html"
], function (declare, _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, template) {
return declare("myApp.ui.platforms.desktop.widgets.LayerManagerWidget", [_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin], {
// summary:
// This widget provides the layer manager user interface component
// templateString: string
// Inherited from _TemplatedMixin, used to specify an HTML file to provide the markup
templateString: template
});
});
它在某种程度上起作用,我认为问题在于解析。因为小部件并不是从一开始就都需要,所以我认为它们没有被解析。 dojo 小部件教程中的一些示例包括小部件中的 dojo/ready 和 dojo/parser 并对其进行解析,但我无法弄清楚如何执行此操作:这些相同的示例之前没有“返回”我不太明白的声明语句,然后你如何用 var myWidget = new MyWidget(); 之类的东西实例化小部件?
所以我想问题的主要部分是,在上面的例子中,我应该在哪里调用 parser.parse() (或者一般来说,我如何确保这个小部件被解析)?
谢谢!
【问题讨论】:
-
您是否尝试在制作新小部件后将根小部件节点传递给
parser.parse(...)? -
@Shoe 您好,感谢您的评论。不,我没有尝试过 - 你能详细说明会去哪里/什么时候吗?即在小部件中的某处,或在实例化它的类中,在这种情况下,在启动()之前/之后?再次感谢!
-
在您的小部件中,您可能会覆盖
startup方法并将小部件根节点传递给 parser.parse(node)。 -
@Shoe 再次感谢,虽然仍然有点困惑,但注意到了另一种症状。我为小部件加载的 html 非常简单,只是。在 postCreate 我试图做 dom.byId("toolsTitle") 但它返回未定义。我刚刚在 startup() 中尝试过,无论是否调用 parser.parse,但仍然未定义。这是否有助于查明我做错了什么?Tools
-
尝试使用
data-dojo-attach-point='toolsTitle'并在您的小部件中使用this.toolsTitle
标签: dojo