切换自定义元素Polymer中的纸张对话框

时间:2016-08-30 14:14:46

标签: javascript polymer web-component shadow-dom paper-dialog

在使用Polymer和JavaScript进行开发时,我相当新,我觉得我切换纸张对话框的方式不是最好的方式或者可以改进。目前我尝试从自定义元素外部调用toggle()函数,虽然我收到错误,但它适用于我 我创建了一个名为my-dialog的自定义元素:

<dom-module id="my-dialog">
  <template>
    <style>
      :host {
        display: inline-block;
      }
    </style>

    <paper-dialog id="popUp" with-backdrop on-iron-overlay-opened="patchOverlay">
      <!-- Dialog content -->
      <h2>Hello World</h2>
    </paper-dialog>

  </template>

  <script>
    Polymer({
      is: 'my-dialog',

    });
  </script>
</dom-module>

从我的一个页面中,我现在想要在单击纸张按钮时打开和关闭对话框。它工作正常但是正如我上面提到的,我感觉这不是我在那里做的那么专业。

<dom-module id="my-profile-view">
  <template>
    <style>
      :host {
        display: block;
      }
    </style>

    <paper-fab icon="create" id="myBtn" on-tap="toggleDialog"></paper-fab>        
    <my-dialog id="myDialog"></my-dialog>

  </template>

  <script>
    Polymer({
      is: 'my-profile-view',

      //Open dialog
      toggleDialog: function() {
        var dialog = this.shadowRoot.querySelector('#myDialog');
        var popUp = dialog.shadowRoot.querySelector('paper-dialog');
        popUp.toggle();
      },
    });
  </script>
</dom-module>

错误消息。我进入我的控制台:

(程序):5 Uncaught TypeError:无法读取属性'removeAttribute'的null(匿名函数)@(程序):5(匿名函数)@(程序):20


Error

如果有人可以为我清理事情会很棒。也许给我一个暗示我能做什么。

1 个答案:

答案 0 :(得分:2)

您的第二个元素my-profile-view不应该知道您的第一个元素my-dialog的内部逻辑。

相反,您的客户对话框应该公开一个公共方法(即toggleDialog)。

my-dialog.html <script>

Polymer({
  is: 'my-dialog',
  toggleDialog: function () {
    this.$.popUp.toggle()
  }
});

这个方法可以由你的第二个元素调用。

my-profile-view.html <script>

Polymer({
  is: 'my-profile-view',
  //Open dialog
  toggleDialog: function() {
    this.$.myDialog.toggleDialog()
  }
});