Kann ein Ember Komponente beobachten, eine controller-Eigenschaft?
Habe ich einen controller und eine Komponente. wenn die Komponente gerendert wird, wird es weitergegeben wird, in dieser Weise:
{{modal-filter feature=feature parentController=this.controller}}
denen Funktion wird ein Parameter übergeben, über den controller an LENKER und parentController ist der controller.
Nun, im controller selbst, es ist eine Eigenschaft (ein array). nennen wir dieses array requiredValues.
Nun in einem controller/Komponente selbst, können wir leicht:
valueObserver : function(){
...
}.observes('requiredValues')
Jedoch muss ich beachten das controller-Eigenschaft von dem modal-filter-Komponente. So in der modal-filter-Komponente, was würde ich als der Beobachter-Funktion:
valueObserver : function(){
...
}.observes(???)
Du musst angemeldet sein, um einen Kommentar abzugeben.
, Was Sie nicht tun dürfen, aber ich werde Ihnen sagen, wie für die Vollständigkeit
Wenn Sie vorbei sind, die controller, können Sie einfach sehen, ein Element auf der
parentController
Eigenschaft, obwohl ich würde nicht empfehlen, diese an alle.Diese würde davon ausgehen, das gesamte array wird ersetzt, nicht nur ein Element Hinzugefügt oder geändert wird.
Element Hinzugefügt oder Entfernt werden
Item-Eigenschaft foo geändert auf eine der requiredValues Elemente
, Was Sie tun sollten,
Statt der übergabe in den controller, nur pass in der Eigenschaft, und beobachten Sie die Eigenschaft.
observes('parentController.values.[]')
Fall.addArrayObserver
emberjs.com/api/classes/...Übergeben einen ganzen controller zu einer Komponente ist eine massive code smell. Es verstößt gegen das Grundprinzip der Komponente Kapselung. Wenn die "Komponente" ist also eng gekoppelt an den controller, dann ist es ein Blick, von wo aus Sie Zugriff auf den controller, indem Sie einfach sagen
this.controller
. Input-Komponenten sollte ausschließlich durch Parameter übergeben, wenn Sie aufgerufen werden. Ausgabe von Komponenten ist durchsend
, das kann der controller in der Karte, um das Verhalten seiner Wahl in seiner Auffassung, die Vorlage, indem Sie sagen:{{my-component action='eraseHardDisk'}}
.Müssen Sie nicht direkt beobachten, was auf die Steuerung von innerhalb der Komponente. Wenn Sie rufen Sie die Komponente mit
{{my-component param=someProperty}}
ist, dann wird jede änderung an der SteuerungsomeProperty
wird automatisch weitergegeben werden, um dieparam
der Komponente. Die Komponente kann dann definieren, einige berechnete Eigenschaft aufparam
, oder beobachten, oder verwenden Sie es in Ihre eigene Vorlage, wo es wird automatisch gehalten up-to-date.