检测ember.js中的路径名称更改

时间:2014-01-27 16:21:40

标签: javascript ember.js

我有一些功能,只要路径发生变化我就需要改变。通常你会用以下方法解决这个问题。

myProp: ( ->
  # .. Do something here
).property('currentPath')

currentPath的问题在于它只检测路由更改,因此未检测到以下转换。

/blog/my-awesome-blog-post -> /blog/new-awesome-post

因为他们正在同一条路线上工作,但我需要检测何时发生此类转换,因为我需要更新我的社交媒体共享链接。

我尝试了类似下面的内容而没有运气。

App = Ember.Application.create({
  conf: config,
  currentPathName: '',
});

App.initializer({
  name: 'Path name observer',
  initialize: function(container, application) {
    var router = container.lookup('router:main');

    router.addObserver('url', function() {
      var lastUrl = undefined;
      return function() {
        Ember.run.next(function() {
          var url = router.get('url');
          if (url !== lastUrl) {
            App.set('currentPathName', url);
            lastUrl = url;
          }
        });
      };
    }());
  }
});

然后观察'App.currentPathName',但这会以某种方式混淆路由器,因为点击时网址突然不会改变。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

这是我从一个友善的灵魂@ github得到的解决方案。目前尚未记录,但工作安静得很好。

Ember.Router.reopen({
  doSomethingOnUrlChange: function() {
    console.log(this.get('url'));
  }.on('didTransition')
});