0

我对 Dojo 很陌生,这就是我想要做的。我有一个使用以下代码以编程方式声明的标题窗格:

     var pane = this._createTitlePane(config.widgets.title,  config.widgets.position, 
                 config.widgets.open);

_createTitlePane: function (title, position, open, optclass) {
          var tp = new TitlePane({
            title: title,
            open: open
          }).placeAt(this.sidebar, position);
          domClass.add(tp.domNode, 'titlePaneBottomFix titlePaneRightFix');
          if (optclass) {
            domClass.add(tp.domNode, optclass);
          }
          tp.startup();
          return tp;
        },

稍后,当使用 esri.hide 单击按钮时,我尝试隐藏此标题窗格。我的问题是如何获得对此标题窗格的引用?定义时没有Id。当我查看 chrome 调试器时,我看到下面的行突出显示了小部件

  <div class="titlePaneBottomFix titlePaneRightFix dijitTitlePane" title="" role="group"    id="dijit_TitlePane_1" widgetid="dijit_TitlePane_1">

如果我尝试执行类似 esri.hide(dojo.byId("dijit_TitlePane_1")) 的操作,那么它会隐藏小部件。但是我可以使用这个小部件 ID 来引用标题窗格吗?

4

2 回答 2

1

您可能只想在函数中为标题窗格提供自己的 id:

_createTitlePane: function (title, position, open, optclass, paneId) {
      var tp = new TitlePane({
        title: title,
        id: paneId, // TitlePane id here
        open: open
      }).placeAt(this.sidebar, position);
      domClass.add(tp.domNode, 'titlePaneBottomFix titlePaneRightFix');
      if (optclass) {
        domClass.add(tp.domNode, optclass);
      }
      tp.startup();
      return tp;
}  

然后你可以参考它并隐藏它:

esri.hide(dijit.byId("theIdYouGaveIt").domNode);

要了解 dojo.byId 和 dijit.byId 之间的区别,此链接可能会有所帮助。

于 2014-03-14T17:30:18.787 回答
1

此外,如果您在自己的自定义小部件中创建它,您还可以使标题窗格成为本地参考,即:this.tp = new TitlePane({...}). 您需要从小部件内部访问它的任何地方,您都可以简单地调用“this.tp”。在小部件之外,您可以使用点符号访问它:myWidget.tp.doSomething()。更好的是,如果您在这样的模板中以声明方式创建它:<div data-dojo-type=dijit/TitlePane" data-dojo-attach-point="tp" ...></div>,当小部件被实例化时,它将通过附加点自动拥有“this.tp”的句柄。

于 2014-03-27T16:51:33.857 回答