2013-07-19 10 views
6

W pliku Ember.js zdarzenia, które nie są obsługiwane w kontrolerze, propagują łańcuch routera do ścieżki aplikacji (więcej informacji można znaleźć w artykule http://emberjs.com/guides/views/handling-events/).Ember.js - Zdarzenie propagacji w górę łańcucha kontrolera/routera

Czy istnieje sposób zdefiniowania procedury obsługi zdarzeń w kontrolerze, która umożliwia kontynuowanie propagacji zdarzenia na routerze?

App.SampleController = Ember.ObjectController.extend({ 
    myEvent: function(obj) { 
    this.set('aVariable', true); 
    } 
}); 

App.ApplicationRoute = Ember.Route.extend({ 
    events: { 
    myEvent: function(obj) { 
     this.transitionTo('something'); 
    } 
    } 
}); 

Czy istnieje sposób dla obsługi myEvent w CarsController aby ustawić swoją zmienną stanu wewnętrznego, ale również kopać zdarzenie górę łańcucha na trasie aplikacji? Jestem tego świadomy:

App.__container__.lookup('router:main').send('myEvent', obj); 

, ale używa wewnętrznych elementów Ember. Miałem nadzieję, że istnieje bardziej standardowy sposób, aby to zrobić.

Odpowiedz

6

Jednym ze sposobów osiągnięcia tego celu mogą być:

App.SampleController = Ember.ObjectController.extend({ 
    needs: 'application', 
    myEvent: function(obj) { 
    this.set('aVariable', true); 

    this.get('controllers.application').send('myEvent'); 
    } 
}); 

Praca demo.

Mam nadzieję, że to pomaga.

+0

Nie działa (wypróbowano przy użyciu Ember.js 1.0.0-rc.6). Zastanawiałem się, czy to też może być, więc próbowałem powrócić do prawdy i fałszu, ale nie działałem. – kleinsch

+0

@kleinsch, zredagowałem moją odpowiedź, przepraszam za pomyłkę – intuitivepixel

+0

@kleinsch adde także demo jsbin: http://jsbin.com/oduhom/3/edit wysyłając zdarzenie do kontrolera aplikacji powinno działać – intuitivepixel