带有空格键的手风琴自举表

问题描述 投票:0回答:1

我看过有关手风琴的问题,但并不完全符合我的具体需要。我的表是使用空格键填充的,更具体的是嵌套每个循环,如下所示:

<tbody>
{{#each piece in pieces}}
    <tr id="{{piece._id}}" class="itemList table-warning">
        <th class="name tText">{{piece.name}} {{piece._id}}</th>
        <td class="pdf tText" style="text-align: center"><a class ="pdf" href="{{piece.pdf}}" target="_blank"><i class="fa fa-file-text-o" aria-hidden="true"></i></a></td>
        <td class="audio tText" style="text-align: center"><a class="audio" href="{{piece.audio}}" target="_blank"><i class="fa fa-volume-up" aria-hidden="true"></i></a></td>
        <td class="format tText">{{piece.instrumentation}}</td>
        <th class="price tText" >${{piece.price}}</th>
        <td><input class ="qty" type ="number" name ="quantity" value="0" min="0"></td>
    </tr>
<!-- Row that is being clicked-->
    <tr class="partsList">
        <td colspan="3"></td>
        <th class="partName tText">{{piece.name}} Parts</th>
        <td colspan="2"></td>
    </tr>

    {{#each part in piece.parts}}
<!-- Rows that should accordion -->
<!-- Currently ALL rows accordion on click. Need to accordion based on _id-->
        <tr class="partList">
            <td colspan="3"></td>
            <td class="pname tText">{{piece.name}}: {{part.pname}}</td>
            <td class="price tText">${{part.pprice}}</td>
            <td><input class="qty" type="number" name="quantity" value="0" min="0"></td>
        </tr>
    {{/each}}
{{/each}}
</tbody>

我有一个像这样的点击功能:

'click .partsList': function(e){
    e.preventDefault();
    $('.partList').nextUntil('tr.itemList').toggle();
}

手风琴功能有效,但它适用于每个循环的每个实例。即每个tr class ="partsList"都会在点击的同时手风琴。

根据我对每个循环的理解,我可以使用{{piece._id}}访问文档的_id。但是,如果我将表行id设置为等于该值,则它只读取集合中FIRST文档的_id

我需要的是点击<tr class="partList">基于_id的手风琴。或者你可能会以不同于引导表的方式进行此操作?

如果我的问题需要澄清,请告诉我。

mongodb meteor bootstrap-4 spacebars
1个回答
1
投票

您可以使用.partslist属性过滤单击的data-*。这会导致jQuery仅选择此特定项。请注意,您需要将data-*属性附加到单击的行以及应折叠的行:

<tbody>
{{#each piece in pieces}}
    ...
    <!-- Row that is being clicked-->
    <!-- use the _id value of the piece context as data attribute -->
    <tr class="partsList" data-id="{{piece._id}}"> 
        <td colspan="3"></td>
        <th class="partName tText">{{piece.name}} Parts</th>
        <td colspan="2"></td>
    </tr>

    {{#each part in piece.parts}}
    <!-- Rows that should accordion -->
    <!-- Currently ALL rows accordion on click. Need to accordion based on _id-->
    <!-- use the _id value of the piece context as data attribute -->
    <tr class="partList" data-target="{{piece._id}}">
    ...
    </tr>
    {{/each}}
{{/each}}
</tbody>
  'click .partsList': function(e, templateInstance){
    e.preventDefault();
    // get the data-id attribute of the clicked row
    const targetId = templateInstance.$(e.currentTarget).data('id')
    // skip if this row is not intended to toggle
    if (!targetId) return
    // toggle based on data-target attribute
    templateInstance.$(`.partList[data-target="${targetId}"]`).nextUntil('tr.itemList').toggle();
  }
© www.soinside.com 2019 - 2024. All rights reserved.