【发布时间】:2016-12-17 01:25:03
【问题描述】:
我是 Polymer 的新手,我有一个包含 simple-overlay 的 dom-repat 自定义元素,我希望在单击关闭按钮时该覆盖应该关闭
这是自定义元素
<link rel="import" href="../../bower_components/polymer/polymer.html">
<link rel="import" href="../../bower_components/paper-styles/typography.html">
<link rel="import" href="../overlay-layer/simple-overlay.html">
<dom-module is="feed-bdy">
<template items="{{items}}">
<style include="iron-flex iron-flex-alignment" >
:host{
--paper-button-ink-color: var(--paper-pink-a200);
--paper-button{
background-color: red !important;
color: red;
}
}
.custom{
color: red;
}
.content-bdy{
min-height: 120px;
}
.scrollable{
@apply(--layout-scroll);
max-width: 75%;
}
</style>
<div class="card-content">
<div class="ar-header">
<h3><a href="#"> [[items.fields.title]]</a></h3>
</div>
<div class="content-bdy"></div>
</div>
[[_renderHTML(items)]]
<div class="card-actions">
<paper-button class="custom" id="ar-[[items.fields.articleId]]" on-click="_openOverlay">إقراء المزيد !</paper-button>
<simple-overlay id="backdrop-[[items.fields.articleId]]" data-ar="backdrop-[[items.fields.articleId]]" with-backdrop class="layout scrollable">
[[_renderFullArticle(items)]]
<button id="dd">Close</button>
</simple-overlay>
<paper-button>
شارك
<iron-icon icon="reply"></iron-icon>
</paper-button>
</div>
</template>
<script>
Polymer({
is: 'feed-bdy',
listeners :{
'dd.click':'_closeOverlay'
},
_renderHTML: function(items) {
// firstp to get only the first pargarph to put in the home page
var ss= items.fields.body;
//console.log(this.$$(".card-content"));
var firstp = ss.substring(0,ss.search("</p>")+4);
this.$$(".content-bdy").innerHTML += firstp;
},
_renderFullArticle : function(items){
this.$$("simple-overlay").innerHTML +=items.fields.body;
},
_toggle : function(e){
var id = Polymer.dom(e).localTarget.title;
//console.log(id);
var moreInfo = document.getElementById(id);
// console.log(moreInfo);
var iconButton = Polymer.dom(e).localTarget;
iconButton.icon = moreInfo.opened ? 'hardware:keyboard-arrow-up'
: 'hardware:keyboard-arrow-down';
moreInfo.toggle();
},
_openOverlay : function(e){
//console.log('calling _openOverlay');
var id = Polymer.dom(e).localTarget.id.split('ar-')[1];
var dd = document.getElementById('backdrop-'+id);
dd.open();
},
_closeOverlay : function(e){
console.log(Polymer.dom(e));
console.log('calling _openOverlay');
var id = Polymer.dom(e).localTarget.id.split('ar-')[1];
// var dd = document.getElementById('backdrop-'+id);
/// dd.close();
}
});
</script>
</dom-module>
并在 index.html 中
<div class="video layout horizontal around-justified wrap" >
<template is="dom-repeat" items="[[ajaxResponse]]" >
<paper-card image="[[item.fields.image]]" class="flex-auto" wide-layout$="{{wide}}">
<feed-bdy items="[[item]]"></feed-bdy>
</paper-card>
</template>
</div>
所以当点击关闭按钮时,_closeOverlay 应该被触发,我尝试控制台消息,如你所见,但没有触发任何事件的任何建议
【问题讨论】:
-
不想这么说,但你在这段代码中有很多事情要做。 1.您在模板中重复了您的样式标签。 2. 监听器不像你定义的那样工作。 3. 在您的按钮元素上添加一个 on-tap="_closeOverlay" 事件处理程序。 4. 您的卡片动作元素应该是一流的自定义聚合物元素,因此在您的 closeOverlay 中,您可以在该简单覆盖元素上进行选择,而无需将元数据“附加”到您正在谈论的覆盖目标。现在,您的收盘价需要聪明地知道要定位哪个叠加层。
-
@getbuckts 感谢您的回答,1- 我将样式标签删除到索引中 2- 我尝试了所有不同的方式来接收事件,但都没有工作 3-添加 on 事件-tap 处理程序没有触发任何事件 4- 我真的不明白是什么问题
标签: javascript polymorphism polymer polymer-1.0 web-component