Ich habe eine Tabellenkomponente, die mehrere Zeilenkomponenten enthält. Jede Zeilenkomponente hat eine isSelected
Eigenschaft.Wie setze ich den internen Zustand der Ember-Komponente von der übergeordneten Komponente?
Einmal möchte ich alle Zeile Komponenten isSelected
ins Innere auf false
von Tabelle Komponente clear
Aktion (eine Schaltfläche) zurücksetzen.
Wie kann ich diese Funktionalität erreichen? Ist die Weitergabe von Daten die einzige Möglichkeit, den internen Zustand einer Komponente zu ändern?
Zeilenkomponente
export default Ember.Component.extend({
tagName: 'tr',
isSelected: false,
classNameBindings: ['isSelected:selected'],
click() {
const data = this.get('data');
const selectedState = this.get('isSelected');
this._toggleSelected();
if (selectedState) {
this.sendAction('rowClicked', {data: data, operator: 'remove'});
} else {
this.sendAction('rowClicked', {data: data, operator: 'add'});
}
},
_toggleSelected() {
this.toggleProperty('isSelected');
}
});
Tabelle Wählbare Komponente
export default Ember.Component.extend({
selectedRows: [],
classNames: ['table-selectable'],
actions: {
rowClicked(row) {
this._addToSelectedRows(row);
},
cleanSelectedRows() {
this._cleanSelectedRows();
}
},
_addToSelectedRows(row) {
console.log(row);
this.get('selectedRows').addObject(row);
},
_cleanSelectedRows() {
this.set('selectedRows', []);
}
});
Ist dies eine Art der Arbeit? Muss ich zu diesem Zweck über meine App-Struktur oder Datenstruktur nachdenken? –
So sollte eine Software funktionieren. Dies ist ein gängiges Muster in Software. Sie können auch einen Service als Event-Bus nutzen. Und senden Sie ein Ereignis von Tisch zu Bus und alle Zeilen hören auf das Ereignis vom Bus –
Danke. Der Event-Bus scheint mir vielversprechend. –