ไม่สามารถเรียกการสลับ Core Collapse ภายในเทมเพลตทำซ้ำ Polymer

ฉันกำลังพยายามสลับแผงยุบหลักที่เรียกว่าภายในองค์ประกอบเทมเพลตที่ทำซ้ำ ฉันได้ระบุ ID แบบไดนามิกให้กับองค์ประกอบการล่มสลายหลัก แต่เมื่อแตะแล้วมันบอกว่า: Uncaught TypeError: boolean is not a function

รหัสของฉันคือ:

<template>
    <template repeat="{{ data }}">
        <style>
            ......
        </style>
        <paper-shadow z="1" class="card">
            <span class="info-bar">{{ cardID }}</span>
            <div vertical layout>
                <div>
                    <div horizontal layout>
                        <div flex style="color:#757575;">
                            <span>Date : </span><br /><span>March 15, 2015</span>
                        </div>
                        <div style="text-align:right;">
                            <paper-icon-button flex icon="subject" style="color:#ed485c;" on-tap="{{ toggle }}" id="{{ cardID }}"></paper-icon-button>
                            <paper-icon-button flex icon="social:share" title="clear" style="color:#ed485c;"></paper-icon-button>
                        </div>
                    </div>
                </div>
                <core-collapse id="{{ cardID }}">
                    <span> Collapse Content </span>
                </core-collapse>
            </div>
        </paper-shadow>
    </template>
</template>

สคริปต์ของฉันคือ:

<script>
    Polymer('i-card', {
        toggle: function (e, detail, sender) {
            var iid = e.target.templateInstance.model.cardID;
            this.shadowRoot.querySelector('#' + iid).toggle();
        },
        ready: function () {
            this.data = this.getData();
        },
        getData: function () {
            var data = [];
            for (var i = 0; i < 100; i++) {
                data.push({
                    cardID : 'icard-' + Math.floor(Math.random()*(1000-1+1)+1),
                });
            }
            return data;
        }
    });
</script>

ฉันต้องสลับองค์ประกอบการยุบตามลำดับในการแตะ


person Micro Ice    schedule 04.04.2015    source แหล่งที่มา


คำตอบ (1)


ปัญหา 1 อย่างคือเป้าหมายการคลิก / แตะมีรหัสเดียวกับการยุบ ซึ่งจะทำให้เกิดปัญหาในการเลือก

สิ่งที่คุณสามารถทำได้คือใส่เทมเพลตที่ทำซ้ำทั้งหมดไว้ใน div แล้วระบุรหัสให้กับมัน ฉันจะเรียกมันว่า "ทั้งหมด"

 <div id="all">
  <tempalte repeat="{{data}}">
    ....
  </template>
 <div>

เปลี่ยนแอตทริบิวต์ id ของเป้าหมายการคลิกของคุณเป็นอย่างอื่นโดยไม่สำคัญว่ามันคืออะไร ฉันจะเรียกแอตทริบิวต์ "ident"

<paper-icon-button flex icon="subject" style="color:#ed485c;" on-tap="{{ toggle }}" ident="{{ cardID }}"></paper-icon-button>

แล้วฟังก์ชันของคุณก็จะมีลักษณะเช่นนี้

    toggle: function (event, detail, sender) {
        var iid = sender.attributes.ident.value;
        this.$.all.querySelector('#' + iid).toggle();
    }

หวังว่านี่จะช่วยได้

person jimi dough10    schedule 04.04.2015
comment
ขอบคุณสำหรับการตอบกลับของคุณ ฉันเปลี่ยนรหัสตามคำตอบ แต่ตอนนี้ฉันได้รับปัญหาที่แตกต่างออกไป 'Uncaught TypeError: ไม่สามารถอ่านคุณสมบัติ 'toggle' เป็น null' - person Micro Ice; 04.04.2015
comment
ฉันแก้ไขปัญหาแล้ว เพิ่งทำการเปลี่ยนแปลงเล็กน้อยในรหัสของคุณ แทนที่จะรับ iid โดย sender.ident ฉันเรียกว่า var iid = e.target.templateInstance.model.cardID; งานนี้สมบูรณ์แบบสำหรับฉัน ขอบคุณ :) - person Micro Ice; 04.04.2015
comment
ดีใจที่คุณได้มันไปทำงาน sender.ident ทำงานใน Chrome สำหรับฉัน คุณทำงานใน Chrome หรือเปล่า? คุณยังสามารถใช้ sender.attributes.ident.value; - person jimi dough10; 04.04.2015
comment
พบวิธีแก้ปัญหาอื่น เนื่องจากคุณถูกต้องเกี่ยวกับการตั้งค่า id เดียวกันสำหรับปุ่มกระดาษและการยุบแกนหลักเป็นสาเหตุหลักของข้อผิดพลาด หลังจากลบรหัสออกจากปุ่มกระดาษแล้ว รหัสทั้งหมดของฉันก็ทำงานได้ดีอย่างสมบูรณ์ ฉันใช้เวลาทั้งสัปดาห์กับปัญหาเล็กๆ น้อยๆ นี้ - person Micro Ice; 04.04.2015