1

是否可以在不重新创建路由视图的情况下更新当前路由的 URL 中的动态参数?

具体来说,假设我有一条处理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)

4

1 回答 1

2

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

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

App.MyRoute = Ember.Route.extend({
  activate: function() {
    this.needsToRender = true;
  },
  renderTemplate: function() {
    if (this.needsToRender){
      this.needsToRender = false;
      render();
    }
  }
});
于 2013-04-26T17:19:39.017 回答