Ich bin verwirrt über den Umfang der ref
Attribut/Bindung. Ich habe zwei HTML-Tabellen, die die gleiche ref="activeTable"
haben und jede Tabelle hat mehrere Zeilen, die alle die gleiche ref="activeRow"
haben.Aurelia ref bindenden Bereich unterschiedlich basierend auf Element?
Sehen Sie diese GistRun (Code unten kopiert).
Wenn ich auf die Bearbeiten-Schaltfläche einer Zeile klicke, wird der Verweis auf die angeklickte Zeile übergeben (unabhängig von der angeklickten Tabelle oder Zeile). Aber wenn ich auf eine Schaltfläche Hinzufügen der Tabelle klicken, wird der Verweis auf die Tabelle B immer wird in geben.
Warum ist ref
für activeTable
überschrieben werden, aber nicht activeRow
?
Meine aktuelle Lösung ist ref="activeTableA"
oder ref="activeTableB"
zu verwenden, aber ich möchte immer noch verstehen, was vor sich geht.
Ich vermute, dass es etwas mit dem repeat
und/oder click.delegate
zu tun hat. Vielleicht wird der Ereignis-Listener zu einem anderen Bereich für die Tabellen und Zeilen hinzugefügt?
HTML
<template>
<h4>Table A</h4>
<!-- Note the table ref -->
<table id="tableA" ref="activeTable">
<thead>
<tr>
<th>Foo</th>
<!-- Passing in table ref -->
<th><button click.delegate="addRow(activeTable)">Add</button></th>
</tr>
</thead>
<tbody>
<!-- Note the row ref -->
<tr repeat.for="foo of foos" ref="activeRow">
<td class="editable-cell">${foo.id}</td>
<!-- Passing in row ref -->
<td><button click.delegate="editRow(activeRow)">Edit</button></td>
</tr>
</tbody>
</table>
<h4>Table B</h4>
<table id="tableB" ref="activeTable">
<thead>
<tr>
<th>Bar</th>
<th><button click.delegate="addRow(activeTable)">Add</button></th>
</tr>
</thead>
<tbody>
<tr repeat.for="bar of bars" ref="activeRow">
<td class="editable-cell">${bar.id}</td>
<td><button click.delegate="editRow(activeRow)">Edit</button></td>
</tr>
</tbody>
</table>
</template>
JS
export class App {
foos = [
{id: 0},
{id: 1},
{id: 2},
{id: 3},
{id: 4},
{id: 5},
{id: 6},
{id: 7},
{id: 8},
{id: 9},
];
bars = [
{id: 10},
{id: 11},
{id: 12},
{id: 13},
{id: 14},
{id: 15},
{id: 16},
{id: 17},
{id: 18},
{id: 19},
];
addRow(table) {
console.log("Adding tow to", table);
}
editRow(row) {
console.log('Editing', row);
}
}
Danke! Ich vermutete, dass es etwas mit dem Wiederholungsbereich zu tun hatte. Sie waren sehr hilfreich in meiner Aurelia Entwicklung hier und anderswo, sehr geschätzt! – lebolo
Vielen Dank! Das bedeutet viel. –