Ich versuche class.bind
in einer Weise zu verwenden, die es von checked.bind
abhängig macht.Problem mit Aurelia class.bind mit checked.bind
Mein Anwendungsfall ist ziemlich einfach. Ich habe eine Liste von Elementen, die mit einer table
angezeigt werden. Jede Zeile dieser Tabelle hat eine checkbox
. Ich möchte eine Zeile als "ausgewählt" markieren, wenn das entsprechende checkbox
(der Zeile) überprüft wird. Hierfür hat ich verwenden folgende Bindung:
<table class="table table-striped table-hover table-responsive">
<tbody>
<tr repeat.for="item of items" class.bind="$parent.selectedItems.indexOf(item)>-1?'info':''">
<td>
<input type="checkbox" checked.bind="$parent.selectedItems" model.bind="item" />
</td>
<td>${item.id}</td>
<td>${item.name}</td>
</tr>
</tbody>
</table>
Allerdings ist das gleiche nicht wie vorgesehen funktionieren, und dies kann in this plunk zu sehen.
Als Abhilfe habe ich eine getter
mit @computedFrom('selectedItems', 'items')
und/oder declarePropertyDependencies(App, 'classes', ['selectedItems', 'items']);
wie folgt:
import {computedFrom, declarePropertyDependencies} from "aurelia-framework";
export class App {
...
@computedFrom('selectedItems', 'items')
get classes() {
const self = this;
const retval= self.items.map((item: any) => {
return self.selectedItems.indexOf(item) > -1 ? "info" : "";
});
return retval;
}
}
//declarePropertyDependencies(App, 'classes', ['selectedItems', 'items']);
Aber auch das funktioniert nicht wie hier in diesem workaround plunk zu sehen ist.
Es funktioniert nur, wenn keiner von @computedFrom
und/oder declarePropertyDependencies
verwendet wird, und das beinhaltet offensichtlich Dirty-Checking.
Gibt es einen sauberen Weg, dies zu tun?