【问题标题】:Polymer handle click event from custom element child来自自定义元素子元素的聚合物处理点击事件
【发布时间】: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


【解决方案1】:

您只显示了 index.html 文件的一部分,但您在 &lt;template is="dom-bind"&gt; 中显示的内容是什么?

Polymer 不适用于数据绑定和事件等,除非这些东西是。

这些天来(在 Google I/O 2016 之后)以及关于延迟加载等的讨论,我已经停止使用 dom-bind 方法,而是使用一个自定义元素,然后在其中包含所有功能,包括样式。

【讨论】:

  • 我不想把所有的索引文件代码放在插入内容的部分,所以有什么建议可以解决这个问题吗??
  • @user3853257 - 我的回复中的模板标签被 stackoverflow 的格式隐藏了。现在更有意义了吗
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多