我在编写自己的小部件时遇到了一些麻烦。我创建了一个继承自_WidgetBase,_TemplatedMixin和_WidgetsInTemplateMixin的小部件(因为我还试图构建一个小部件将包含其他小部件的UI)。我正在使用dojo / text从模板加载小部件的标记。这是一个片段:
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并解析它但我无法弄清楚如何执行此操作:这些相同的示例之前没有'return'我不太明白的声明语句,然后你如何用var myWidget = new MyWidget()之类的方法实例化小部件? ?
所以我想问题的主要部分是,在上面的例子中,我在哪里调用parser.parse()(或者一般来说,我如何确保解析这个小部件)?
谢谢!
答案 0 :(得分:2)
在小部件代码本身中,您不应该放置parser.parse()
之类的东西或类似的东西。要确保正在解析窗口小部件,您必须将其导入主JavaScript文件(带有require()
块的文件)并自动或手动解析。
例如,如果小部件位于名为 MyWidget.js 的文件中,则会在主JavaScript文件中添加类似的内容(例如 app.js ):
require([ "custom/MyWidget", "dojo/parser" ]);
如果您已将Dojo配置为自动解析,则此工作正常。如果您想要手动解析,可以使用:
require([ "dojo/parser", "custom/MyWidget", "dojo/domReady!" ], function(parser) {
parser.parse(); // Parses the entire DOM
});
如果您想以编程方式创建窗口小部件的实例,则根本不需要解析,只需使用:
require([ "custom/MyWidget", "dojo/domReady!" ], function(MyWidget) {
var myWidget = new MyWidget({ }, "myDomNodeId");
});
答案 1 :(得分:1)
你读过吗
http://dojotoolkit.org/reference-guide/1.9/quickstart/writingWidgets.html
- >
ready(function(){
// Call the parser manually so it runs after our widget is defined, and page has finished loading
parser.parse();
});
由于您编写了自定义dijit小部件,因此您可以在此处阅读其生命周期中的其他函数:
http://dojotoolkit.org/documentation/tutorials/1.8/understanding_widgetbase/
- > “postCreate”,“startup”