Ich bin neu in Vue, also geh einfach zu mir! Hier ist die Situation. Es muss einen besseren Weg geben als das, was ich hier mache.Vue - Wie bindet man Tabellenspalten an ein Datenobjekt?
Ich habe eine einfache 2-Säule HTML-Tabelle:
<table id="contacts">
<tbody>
<tr>
<th class="column-1">
Contact Id
</th>
<th class="column-2">
Applications assigned count
</th>
</tr>
<tr class="odd" id="contacts_tr_1">
\t <td class="column-1">
1
</td>
\t <td class="column-2">
247
</tr>
<tr class="even last" id="contacts_tr_2">
\t <td class="column-1">
2
</td>
\t <td class="column-2">
0
</td>
</tr>
<tr class="even last" id="contacts_tr_2">
\t <td class="column-1">
3
</td>
\t <td class="column-2">
44
</td>
</tr>
<tr class="even last" id="contacts_tr_2">
\t <td class="column-1">
.........
</td>
\t <td class="column-2">
.........
</td>
</tr>
<tr class="even last" id="contacts_tr_2">
\t <td class="column-1">
10
</td>
\t <td class="column-2">
76
</td>
</tr>
</tbody>
</table>
Ich mag die „Anwendungen zugewiesen count“ Spalte (aber nur für bestimmte Zeilen) aktualisieren, wie durch das Ergebnis bestimmt eines AJAX-Anrufs. Unter der Annahme, dass die Tabelle 10 Zeilen aufweist, könnte der AJAX-Aufruf also sagen, dass der Wert der Spalte "Anzahl der zugewiesenen Anwendungen" der Zeilen 1, 4 und 7 aktualisiert werden muss, z. 247, 80 und 356 jeweils. Ich denke darüber nach, ein JSON-Objekt wie dieses als mein Vue-Datenobjekt zu verwenden, weil die AJAX-Antwort so aussehen wird.
data: {
num_of_applications_assigned: [
{
"party_id": "1",
"num": "247"},
{
"party_id": "4",
"num": "80"},
{
"party_id": "7",
"num": "356"}
]
},
Ich dachte, es könnte ein Weg sein, um die „Anwendungen zugewiesen count“ Spalte auf das Vue Datenobjekt zu binden, die durch den AJAX-Aufruf aktualisiert wird, aber ich sehe keinen Weg, diese andere zu tun, als das Hinzufügen ein eindeutiger v-Text zu jeder einzelnen Zelle <TD>
z
<div v-text="num_of_applications_assigned_1"></div>
<div v-text="num_of_applications_assigned_2"></div>
etc
Dies hat jedoch mich führen einige sehr gewundenen Code zu schreiben, wenn diese v-Texte mit den Ergebnissen der AJAX-Antwort zu aktualisieren, wie ich, um dynamisch die Referenzen konstruieren:
let vm = this;
jQuery.ajax({
url: myurl
}).then(function(response) {
for (var i = 0, len = vm.num_of_applications_assigned.length; i < len; i++) {
var party_id = vm.num_of_applications_assigned[i].party_id;
var dref = 'vm.num_of_applications_assigned_'+party_id;
var dnum = vm.num_of_applications_assigned[i].num;
eval(dref + ' = ' + dnum + ';');
}
});
Ja Ich weiß, Eval ist schlecht - deshalb bin ich hier um Hilfe bitten! Was ist ein besserer Weg dies zu tun, oder passt Vue nicht gut zu dieser Situation?
Verwenden Sie v-for-Richtlinie und ja vue reaktiv ist, alles, was Sie tun müssen, haben Ihre Daten mit den Ergebnissen aus dem Ajax-Aufruf aktualisiert und die Tabelle würde mit dem Updates rerender. –
Ich glaube nicht, dass ich in diesem Fall v-for verwenden kann, da die Tabellenzeilen auf dem Server vordefiniert sind. Ich kann jedoch einzelne Zeilen oder Zellen hinzufügen. Was schlägst du vor? –