我正在尝试观察路线更改,以便在渲染后应用一些常见操作。我们的想法是拥有与onload
类似的功能,但是当我们使用单页应用时,需要在每次路由更改时触发。 (可以限定为新视图)
我找到了如何观察currentPath的变化:
App.ApplicationController = Ember.Controller.extend({
currentPathDidChange: function() {
prettyPrint()
}.observes('currentPath');
});
虽然这在某些情况下效果很好,但是当路由发生变化时会触发,但仍然要提前应用内容更改,因为它似乎会在内容呈现之前附加。
有关实现此目标的最佳做法的想法吗?
答案 0 :(得分:12)
您是否尝试使用Ember.run.schedule
延迟代码?例如,
App.ApplicationController = Ember.Controller.extend({
currentPathDidChange: function() {
Ember.run.schedule('afterRender', this, function() {
prettyPrint();
});
}.observes('currentPath')
});
答案 1 :(得分:1)
由于deprecation of Controllers in Ember 1.x发现路由器中的网址是未来证明您的应用的好方法。你可以在ember-cli
中这样做:
// similar to onLoad event behavior
export default Ember.Route.extend({
afterModel: function (model){
Ember.run.next(() => {
console.log(this.get('router.url'));
});
}
});
// hacky way to get current url on each transition
export default Ember.Route.extend({
actions: {
didTransition: function() {
Ember.run.next(() => {
console.log(this.get('router.url'));
});
}
}
});
这将记录:/posts
和/posts/3/comments
等。