【发布时间】:2014-11-18 14:57:11
【问题描述】:
在遵循聚合物网站上关于自定义事件创建和委托 (https://www.polymer-project.org/articles/communication.html) 的示例时,我遇到了奇怪的行为。当标签更改时,我有聚合物选项卡射击我的自定义事件,现在我正在尝试我的另一个自定义元素来收听事件并反应,但是我缺少一些我缺少的事情,因为事件没有从内部被拿起ready() 函数。但是,如果我将它绑定到窗口,我可以看到它没有任何问题地触发,所以第二双眼睛将不胜感激:)
这是在标签更改时触发事件的自定义元素:
<polymer-element name="pm-tabmenu">
<template>
<style>
:host {
display:block;
}
</style>
<paper-tabs selected="1" id="tabmenu">
<paper-tab id="pm-tabmenu-all" state="all">All</paper-tab>
<paper-tab id="pm-tabmenu-wip" state="wip">In Progress</paper-tab>
<paper-tab id="pm-tabmenu-finished" state="finished">Finished</paper-tab>
</paper-tabs>
</template>
<script>
Polymer({
ready: function () {
var tabs = this.$.tabmenu;
tabs.addEventListener('core-select', function (event) {
if (event.detail.isSelected) {
this.fire("pmtabmenuselect", {
state: event.detail.item.getAttribute('state')
});
alert(event.detail.item.getAttribute('state'));
}
});
}
});
</script>
</polymer-element>
这就是我想在另一个自定义元素中捕获事件的方式:
<polymer-element name="pm-list">
<template>
<style>
:host {
display:block;
}
</style>
<h1> Current filter: {{filter}}</h1>
</template>
<script>
window.addEventListener('pmtabmenuselect', function (e) {
alert("This does fire");
});
Polymer({
filter: "Not yet defined",
ready: function () {
this.addEventListener('pmtabmenuselect', function (e) {
alert("This does not fire");
});
}
});
</script>
</polymer-element>
在索引文件中,两个元素都包含在内,然后被调用,但没有部分,因为我认为目前不需要它。
<core-header-panel flex main>
<core-toolbar class="medium-tall">
<paper-icon-button icon="menu" core-drawer-toggle></paper-icon-button>
<div flex>Tests</div>
<paper-icon-button icon="search"></paper-icon-button>
<paper-icon-button icon="more-vert"></paper-icon-button>
<div class="bottom fit" horizontal layout>
<pm-tabmenu flex style="max-width: 600px;"></pm-tabmenu>
</div>
</core-toolbar>
<pm-list></pm-list>
</core-header-panel>
【问题讨论】:
标签: javascript polymer dom-events