未捕获的类型错误打开对话框

时间:2018-06-21 13:09:52

标签: javascript polymer polymer-2.x

我在Polymer 2中进行编码,并试图在函数运行时打开纸张对话框组件:

_boundListener(e) {
  this.error = e.detail;
  console.log(this.error);
  this.$.dialog.open();
}

我已经证实this.error正在运行,并且包含正确的数据。我的模板中有一个带有对话框ID的纸质对话框,但是运行此函数时,会收到以下消息:

未捕获的TypeError:无法读取未定义的属性“对话框”

有什么想法吗? TIA

此事件在触发事件侦听器时运行。该函数会触发该监听器:

  testError(e) {
    const err = e.detail.request.xhr.response.message;
    window.dispatchEvent(new CustomEvent('_GEtesterror', {bubbles: true, detail: err}));
  }

我必须使用window.dispatchEvent触发此事件,因为它没有冒泡到对话框所在的html。这可能就是为什么找不到此$ .dialog吗?

监听器的功能如下:

connectedCallback() {
  super.connectedCallback();
  window.addEventListener('_GEtesterror', this._boundListener);
  this._boundListener.bind(this);
}
disconnectedCallback() {
  super.disconnectedCallback();
  window.removeEventListener('error', this._boundListener);
}
_boundListener(e) {
  this.error = e.detail;
  console.log(this, this.$);
  this.$.dialog.open();
}

1 个答案:

答案 0 :(得分:1)

由于未定义name,因此收到此错误。

使用this.$确定调用该函数的范围。用错误的范围调用了您的侦听器。

此外,绑定您的_boundListener到正确的范围:

console.log(this, this.$)