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