获取以编程方式定义的TitlePane的ID以显示/隐藏

时间:2014-03-14 17:02:25

标签: javascript dojo arcgis esri arcgis-js-api

我对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(&#34; dijit_TitlePane_1&#34;))的事情,那么它会隐藏小部件。但是我可以使用此小部件ID来引用标题窗格吗?

2 个答案:

答案 0 :(得分: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之间的区别,这个link可能会有所帮助。

答案 1 :(得分:1)

此外,如果您在自己的自定义窗口小部件中创建此项,则还可以将标题窗格设置为本地参考,即:this.tp = new TitlePane({...})。您需要从小部件内部访问它的任何地方,您只需调用&#34; this.tp&#34;。在小部件之外,您可以使用dot notataion访问它:myWidget.tp.doSomething()。更好的是,如果你在这样的模板中以声明的方式创建它:<div data-dojo-type=dijit/TitlePane" data-dojo-attach-point="tp" ...></div>,当实例化小部件时,它将自动拥有一个句柄,以便#t; this.tp&#34;通过附加点。