我有一个带有搜索栏的Ember应用程序。我想在每次URL更改时清除搜索栏的内容。实际操作很简单(我已经创建了一个功能来轻松获取搜索栏):
App.searchBar().set('content', "")
问题是,我在哪里放这个代码?一个(相当没有吸引力的)选项是将其包含在每条路线中。不过,我认为必须有一个更好的方法。也许有一些东西在烘烤。也许有一种方法来monkeypatch Em.Router。任何建议都将受到高度赞赏。
答案 0 :(得分:3)
您可以在currentPath上的应用程序控制器中添加一个观察者,并且每次更改时都会运行该观察者。
App.ApplicationController = Em.Controller.extend({
resetMySearchBar: function(){
App.searchBar().set('content', "");
}.observes('currentPath')
});
此外,在搜索栏所在的控制器上,您可以添加应用程序控制器的需求,并观察当前路径并在更新时进行更新。
App.SearchBarController = Em.Controller.extend({
needs: ['application'],
resetMySearchBar: function(){
this.set('content', ""); // or wherever this property lives
}.observes('controllers.application.currentPath')
});