Mam komponent reprezentujący mapę i po akcji w moim kontrolerze chcę wywołać metodę na komponencie, aby wyśrodkować mapę. Kod wygląda następującoJak wywołać metodę składnika ze kontrolera?
App.PlacesController = Ember.Controller.extend({
actions : {
centerMap : function() {
// how to call from here to GoogleMapComponent.centerMap ??
}
}
});
App.GoogleMapComponent = Ember.Component.extend({
centerMap : function() {
}
});
szablonu
{{google-map}}
<button {{action "centerMap"}}>Center Map</button>
Znalazłem obejście, ale nie sądzę, jest to sposób Ember to zrobić.
{{google-map viewName="mapView"}}
<button class="center-map">Center Map</button>
App.PlacesView = Ember.View.extend({
didInsertElement : function() {
this.$(".center-map").click(this.clickCenterMap.bind(this));
},
clickCenterMap : function() {
this.get("mapView").centerMap();
}
});
Używam Ember 1.1.2, a EmberController nie ma metody wyzwalania. To jest właściwy wzór? Kontroler powinien uruchamiać zdarzenia, a widok ich wysłucha? – axelhzf
@axelhzf Aby wywołać zdarzenia i odsłuchać je, musisz utworzyć obiekt, dodając mixin 'Ember.Evented', tak jak to:' App.someController = Ember.Controller.extend (Ember.Evented, {...}) ; ', możesz subskrybować zdarzenia i podnosić zdarzenia przy użyciu metod z mixu' Ember.Evented'. –
Podoba mi się to rozwiązanie, ale nie widziałem wcześniej użycia .proxy - czy możesz dokładnie wyjaśnić, co to robi? –