Polymer 找不到自定义元素javascript函数

Polymer 找不到自定义元素javascript函数,polymer,Polymer,我正试着让我的头脑清醒过来。显然,定制元素是整个沙邦的关键。我确实做了一些,有些正在工作,有些我就是不能让他们做我想做的 顺便说一句,我使用的是0.5版。为什么,只是因为我懒得改变 这是我的问题 我希望在单击链接时弹出一个纸质对话框。当代码直接位于Index.html页面中时,它可以完美地工作。但当我将其包装为自定义元素时,它无法找到我的Javascript事件 我在控制台中遇到此错误: “未捕获引用错误:未定义toggleDialog” 我知道这是我不明白的原因。但我很难得到聚合物的具体细节

我正试着让我的头脑清醒过来。显然,定制元素是整个沙邦的关键。我确实做了一些,有些正在工作,有些我就是不能让他们做我想做的

顺便说一句,我使用的是0.5版。为什么,只是因为我懒得改变

这是我的问题

我希望在单击链接时弹出一个纸质对话框。当代码直接位于Index.html页面中时,它可以完美地工作。但当我将其包装为自定义元素时,它无法找到我的Javascript事件

我在控制台中遇到此错误:

“未捕获引用错误:未定义toggleDialog”

我知道这是我不明白的原因。但我很难得到聚合物的具体细节

下面是我正在尝试做的代码

<polymer-element name="cvirt-reader" attributes="content" >
  <template>   
    <a href="#" onclick="toggleDialog()">Read</a>    

    <div id="HelpDialog">   
      <paper-dialog  id="dlgHelper"  heading="Bottom Dialog" transition="paper-dialog-transition-bottom">
        <a href="#"><IMG src="/cvirtAnimee.gif"></a>
        <paper-button label="Fermer" affirmative autofocus></paper-button>
      </paper-dialog>
    </div>

  </template>
  <script>
  Polymer('cvirt-reader', {
      toggleDialog: function(e) {
        this.$.dlgHelper.toggle();
      }
    });
</script>
</polymer-element>

聚合物(“cvirt-reader”{
切换对话框:函数(e){
这是$.dlgHelper.toggle();
}
});
更简单的答案 Polymer提供了使用
on-
属性将元素的方法绑定到事件的功能:

<a href="#" on-click="{{toggleDialog}}">Read</a>
问题是:当使用
onclick=“toggleDialog()”
时,浏览器将在全局范围内查找
toggleDialog
函数,而它实际上是聚合元素的属性,因此不在全局范围内,导致
引用错误

通过从
ready
函数内部绑定事件侦听器,可以从当前作用域访问您需要的所有内容,即:您可以通过
this
找到
toggleDialog
,并将其添加为事件侦听器

请注意使用
.bind(this)
,这将强制
this
引用聚合元素,而不是
切换对话框
中的事件

onclick=“toggleDialog()”


如果您这样编写,应该可以使用:
on click=“toggleDialog”

谢谢,它工作得很好。但我想知道为什么。我的Javascript和自定义元素知识不是我希望的。我编辑了答案,试图解释它的工作原理。不幸的是,它确实解决了问题。谢谢你的回答。你试过我的解决方案吗?对不起,我没有拼写。我应该这样写:不幸的是,它没有解决问题……好的。在polymer ^1.0中工作我刚刚在polymer 1.0中试用过,但也不起作用。我想你的意思不是本地的
onclick
,而是单击
,这是由Polymer定义和处理的。那么这将是一个比我建议的更好的解决方案。
Polymer('cvirt-reader', {
    ready: function () {
        this.$.read.addEventListener('click', this.toggleDialog.bind(this), false);
    },
    toggleDialog: function(e) {
        this.$.dlgHelper.toggle();
    }
});