Ich habe eine dom-repeat
Vorlage, die Tabellenzeilen generiert, wobei eine der Zeilenzellen eine Schaltfläche enthält, die ich deaktiviert werden soll, wenn der Wert der Zeile einen bestimmten Wert hat. Also meine Komponente diesen Code hat, der eine berechnete Bindung verwendet den Wert der disabled
Eigenschaft der Schaltfläche zu setzen:Polymer berechnete Bindung wird nicht auf Update
<template is="dom-repeat" items="{{list}}" as="ticket">
<tr class$="{{ticket.status}}">
<td class="actions">
<paper-icon-button icon="add" on-tap="incTickets"
disabled="{{noAvailableTickets(ticket)}}">
</paper-icon-button>
</td>
<td>[[ticket.amount]]</td>
<td>[[ticket.event.title]]</td>
</tr>
</template>
Und in meinem Code habe ich diese Methode:
noAvailableTickets : function(ticket) {
return ticket.event.available_tickets <= 0;
}
Ich kann sehen, dass die Die Methode zum Berechnen der Bindung wird beim Erstellen der Liste einmal für jedes Element aufgerufen.
Dann, wenn ich Artikel aktualisieren, wie folgt aus:
this.set('list.' + ind + '.amount', newamount);
Die berechnete Bindung ist nicht recalcuated, und das Verfahren wird nicht noch einmal aufgerufen, obwohl ich der Wert tatsächlich in der in der ticket.amount
Anzeige ändern sehen Vorlage.
Die Polymer Data Binding entry in the developer's guide hat dies etwa berechnet Bindungen zu sagen:
die [...] Eigenschaft wird auf den Rückgabewert von
computeFullName
gebunden, die bei jedem ersten oder letzten Änderungen neu berechnet wird. [first
undlast
sind die angegebenen Argumente fürcomputeFullName
]
So unter der Annahme, dass die Bindung berechnet ist nicht bekannt, die Korrelation zwischen dem Objektwert, seine amount
Eigenschaft und wie andere Logik verwendet diese die available_tickets
Eigenschaft zu aktualisieren ich habe versucht, einen notifyPath
Befehl mit dem vollständigen aktualisierten Objekt, wie dies hinzuzufügen:
this.notifyPath('list.' + displayId, ticket);
Aber das hat keine Wirkung zu haben scheint. Was vermisse ich?
Ich weiß, dass dies bereits beantwortet wurde, aber haben Sie erwogen, 'this.push ('path', value)' 'anstelle von' this.set' zu verwenden? – Alan
'push' fügt dem Array hinzu, aber ich möchte kein weiteres Element hinzufügen, sondern nur das vorhandene aktualisieren. – Guss