Ember.js:避免当前路由重新进入(并重新渲染)url动态段更新

时间:2013-04-14 02:25:46

标签: ember.js

是否可以更新当前路线的网址中的动态参数,而无需重新创建路线视图?

具体来说,假设我有一条处理post/:post_id的路线。此路线的视图显示具有给定id的帖子,但(以无限滚动样式)还允许用户平滑地向下滚动到后续帖子。我想更新网址以反映他们目前正在查看的帖子。如果我调用reaplceWith('post', newlyFocusedPost) renderTemplate挂钩,我的原始视图将被销毁,呈现新视图,并且平滑性将丢失。

我喜欢Backbone.js的相当于:

router.navigate('posts/123', {navigate:false, replace:true});

另一个解决方案是,如果将相同的模板渲染到同一个插座中,则重用现有视图并更新其绑定。

(我目前的解决方案是使用一个子路由postAtId来处理没有视图的动态ID以及对controllerFor('post').set('content', newPost)的调用

1 个答案:

答案 0 :(得分:2)

当只有上下文发生变化时重新渲染可能是一个错误。有一个pull request可以解决这个问题。

但是也可以通过覆盖renderTemplate在您自己的路线中解决此问题,以便它只在第一次进入路线后立即渲染。例如:

App.MyRoute = Ember.Route.extend({
  activate: function() {
    this.needsToRender = true;
  },
  renderTemplate: function() {
    if (this.needsToRender){
      this.needsToRender = false;
      render();
    }
  }
});