Im Layout, an dem ich gerade arbeite (basierend auf dieser fiddle), hängt eine verschachtelte Komponente (die sticky scrollbar) von den Dimensionen der übergeordneten Komponente ab, also überlasse ich diese Dimensionen als Attribute. Etwas wie:Übergeben der Komponentenabmessungen an eine andere verschachtelte Komponente in Ember
{{!-- Rest of the template --}}
{{div-scroller
width=tracksWidth offset=tracksOffset
scrollWidth=tracksScrollWidth scrollLeft=tracksScrollLeft
scrollUpdated=(action "updateComponentScroll") }}
Das Problem ist, dass in Embers Komponente Lebenszyklus, nur die Dimensionen für eine Komponente nach didInsertElement
erhalten. Wenn ich versuche, dies zu tun:
didInsertElement(...args) {
this._super(args);
// Get dimensions
this.set("tracksWidth", this.$().width());
this.set("tracksOffset", this.$().offset());
this.set("tracksScrollWidth", this.$().get(0).scrollWidth);
this.set("tracksScrollLeft", this.$().scrollLeft());
this.set("lastScrollPosition", this.$().scrollLeft());
}
Ember beklagt, dass ich nicht Objekte im didInsertElement
(oder in didRender
) aus Leistungsgründen setzen soll.
Gibt es eine andere Möglichkeit, die Dimensionen einer übergeordneten Komponente an eine untergeordnete Komponente zu übergeben?
Vielleicht ist es nicht mit Ihrem Anwendungsfall möglich, aber haben Sie versucht Addon dies für Sie zu tun? Ich habe einen perfekten Scrollbar-Wrapper [ember-cli-scrollbar] (https://github.com/Keeo/ember-cli-scrollbar) erstellt, um mir dabei zu helfen. – Keo
Danke, Keo. Ich habe deinen Wrapper sogar ausprobiert, genauso wie die perfekte Scrollleiste, aber es hat nicht funktioniert. Mein Layout ist ein bisschen komplex und das div Ich brauche die Bildlaufleiste für hat zwei blättern Eltern: die vertikale scrollt div mit seinem Geschwister und es ist an die Eltern, während die horizontale scrollt nur das div (und nicht das Geschwister) und es ist an das div selbst. – JayC
Ich sehe, nun denke ich, dass ich es versuchen würde (aber wahrscheinlich einige Probleme haben wird), Setzer in 'Ember.run.later' oder' Ember.run.scheduleOnce ('afterRender', ...) '[templateOnce ] (http://emberjs.com/api/classes/Ember.run.html#method_scheduleOnce). – Keo