如何解析Dojo自定义小部件

时间:2014-05-21 15:04:21

标签: dojo

我在编写自己的小部件时遇到了一些麻烦。我创建了一个继承自_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()(或者一般来说,我如何确保解析这个小部件)?

谢谢!

2 个答案:

答案 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");
});

例如:http://plnkr.co/edit/K3Zln6Q00g6v2DQeWcIM?p=preview

答案 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”