Ember.js全局路由/转换事件
是否可以订阅应用程序中的所有转换事件?或者包含当前路线的可观察属性Ember.js全局路由/转换事件,ember.js,Ember.js,是否可以订阅应用程序中的所有转换事件?或者包含当前路线的可观察属性 我正在与需要同步到当前路由的第三方UI组件集成。如前所述,应用程序控制器具有currentRouteName属性。它主要用于调试,但我认为它是一个相当稳定的属性,可以在生产中使用 编辑:如果您需要收到所有更改的警报,请使用与Ember内部相同的方法。但是,只有在使用基于散列的路由时,这才有效。如果您使用的是Ember基于历史API的路由,那么您必须使用它。在您的应用程序控制器中,您可以添加此代码段,它会在每次路径/路由更改时触发
我正在与需要同步到当前路由的第三方UI组件集成。如前所述,应用程序控制器具有
currentRouteName
属性。它主要用于调试,但我认为它是一个相当稳定的属性,可以在生产中使用
编辑:如果您需要收到所有更改的警报,请使用与Ember内部相同的方法。但是,只有在使用基于散列的路由时,这才有效。如果您使用的是Ember基于历史API的路由,那么您必须使用它。在您的应用程序控制器中,您可以添加此代码段,它会在每次路径/路由更改时触发
currentPathDidChange: function currentPathDidChange() {
var path = this.get('currentPath')
}.observes('currentPath')
我通过连接到路由器解决了这个问题 实时示例:(修改了找到的示例)
这让我很接近,但它只包括路径的静态部分,例如
users/fred的currentRouteName
是users/user
。在动态路径之间切换时不会触发更改事件,例如从posts/1
转换到posts/2
。与currentRouteName
一样,从/posts/1
更改为/posts/2
时不会触发更改事件
App.Router.reopen({
updateCurrentRoute: function(infos) {
var appController = this.container.lookup('controller:application');
if (!('currentRoute' in appController)) {
Ember.defineProperty(appController, 'currentRoute');
}
if (infos && infos.length > 0) {
// The last part of the route contains the route name
var route = infos[infos.length - 1].name;
// Collect the dynamic route parameters
var params = infos.reduce(function(a, b) {
// Parameter can be named anything
// assume there are 0 or 1 parameters
for (var name in b.params) {
if (b.params.hasOwnProperty(name)) {
// 1 parameter
return a.concat(b.params[name]);
}
}
// 0 parameters
return a;
}, []);
var path = [route].concat(params);
Ember.set(appController, 'currentRoute', path);
} else {
Ember.set(appController, 'currentRoute', []);
}
},
didTransition: function(infos) {
this.updateCurrentRoute(infos);
return this._super(infos);
}
});