Ich bin ein Drag-und-Drop-Arbeitsbereich, ähnlich denen, die Sie für die Herstellung von Mockups finden. Ich habe ein benutzerdefiniertes Arbeitsbereichselement mit einem größeren verschachtelten Element, das gezoomt und geschwenkt werden kann. Daher muss ich die Größe und die Positionsdaten des Arbeitsbereichs und aller darin enthaltenen Elemente sorgfältig verfolgen.Auslöser Callback nach Bindungen in Aurelia neu bewerten
In meinem fügtes Ereignisse meines benutzerdefinierten Elements, habe ich programmatisch die Höhe und Breite des Arbeitsbereiches als JavaScript-Objekt, das die CSS in der Ansicht gebunden ist:
workspaceCustomElement.js
export class WorkspaceCustomElement {
constructor(element) {
this.element = element;
}
attached() {
this.workspace.size = {
height: this.element.height * 5,
width: this.element.width * 5
}
}
}
workspaceCustomElement.html
<div css="height: ${workspace.height}px; width: ${workspace.width}px;
left: ${(element.clientWidth - workspace.width)/2}px;
top: ${(element.clientHeight - workspace.height)/2}px;"></div>
Jetzt habe ich Probleme, die Positionen meiner Kindelemente zu erfassen. Ich habe auch Callbacks an sie angehängt, aber sie werden vor der angefügte Rückruf oben bewertet, und so die CSS-Bindung wurde nicht ausgewertet, und die Größe und Positionen sind falsch.
Ich brauche einen Rückruf hinzufügen nach der attached()
wurde ausgewertet und die Bindungen wurden aktualisiert. Ich kann dies erreichen, indem Sie einen setTimeout
Hack verwenden, aber ich habe kein Vertrauen, dass dies immer funktioniert.
attached() {
this.workspace.size = {
height: this.element.height * 5,
width: this.element.width * 5
}
setTimeout(() => {
let components = this.element.querySelectorAll('.component');
Array.prototype.forEach.call(components, (component) => {
let model = component.model;
model.position = {
x: component.clientLeft,
y: component.clientTop
};
}
}, 0)
}
Gibt es eine bessere, zuverlässigere Möglichkeit, eine Anweisung nach dem nächsten verbindlichen Update in die Warteschlange zu stellen?
Wie wäre es mit Aurelias 'TaskQueue'? http://stackoverflow.com/questions/36049391/is-there-a-callback-or-promise-for-aurelia-show-bind –