2013-11-15 9 views
2

У меня есть приложение Ember с панелью поиска. Я хочу очистить содержимое панели поиска каждый раз, когда изменяется URL. Фактическое действие легко (я создал функцию, чтобы легко получить строку поиска):Выполнить действие при каждом изменении URL-адреса

App.searchBar().set('content', "") 

Проблема заключается в том, где я могу поставить этот код? Один (довольно непривлекательный) вариант должен включать его в каждый маршрут. Однако я предполагаю, что должен быть лучший подход. Может быть, есть что-то запеченное. Может быть, есть способ обезвредить Em.Router. Любые предложения будут высоко оценены.

ответ

3

Вы можете добавить наблюдателя в контроллер приложения на currentPath, и каждый раз, когда он изменяется, запускается это.

App.ApplicationController = Em.Controller.extend({ 
    resetMySearchBar: function(){ 
    App.searchBar().set('content', ""); 
    }.observes('currentPath') 
}); 

Кроме того, на контроллере, где ваш поиск бар жизни, вы могли бы добавить потребности для контроллера приложения, и наблюдать за currentPath и обновления, когда он делает.

App.SearchBarController = Em.Controller.extend({ 
    needs: ['application'], 
    resetMySearchBar: function(){ 
    this.set('content', ""); // or wherever this property lives 
    }.observes('controllers.application.currentPath') 

}); 
+0

Красивая. Это намного проще, чем я ожидал. – nullnullnull

Смежные вопросы