Ember.js:避免在url动态段更新时重新输入(并重新呈现)当前路由
是否可以在不重新创建路由视图的情况下更新当前路由的URL中的动态参数 具体来说,假设我有一个处理Ember.js:避免在url动态段更新时重新输入(并重新呈现)当前路由,ember.js,Ember.js,是否可以在不重新创建路由视图的情况下更新当前路由的URL中的动态参数 具体来说,假设我有一个处理post/:post\u id的路由。此路线的视图显示具有给定id的帖子,但是(以无限滚动方式)也允许用户平滑地向下滚动到后续帖子。我想更新url以反映他们当前查看的帖子。如果我调用reaplceWith('post',newlyFocusedPost)renderTemplatehook,我的原始视图将被破坏,新视图将被渲染,平滑度将丢失 我喜欢与Backbone.js相当的功能: router.n
post/:post\u id
的路由。此路线的视图显示具有给定id
的帖子,但是(以无限滚动方式)也允许用户平滑地向下滚动到后续帖子。我想更新url以反映他们当前查看的帖子。如果我调用reaplceWith('post',newlyFocusedPost)
renderTemplatehook,我的原始视图将被破坏,新视图将被渲染,平滑度将丢失
我喜欢与Backbone.js相当的功能:
router.navigate('posts/123', {navigate:false, replace:true});
另一种解决方案是,如果将同一模板呈现到同一个出口中,则重用现有视图并仅更新其绑定
(我目前的解决方案是使用一个子例程,
postAtId
,该子例程处理动态id,不带任何视图,并调用controllerFor('post')。set('content',newPost)
)当只有上下文发生更改时重新呈现可能是一个错误。有一种方法可以解决这个问题
但是,也可以通过覆盖renderTemplate
在您自己的路由中解决此行为,以便它仅在第一次进入路由后立即渲染。例如:
App.MyRoute = Ember.Route.extend({
activate: function() {
this.needsToRender = true;
},
renderTemplate: function() {
if (this.needsToRender){
this.needsToRender = false;
render();
}
}
});