2015-11-13 35 views
1

我有一個路徑postDetail,路徑/posts/:postId使用流路由器。如果一個對象不存在,重定向到Meteor中的不同路由

我想檢查帖子是否確實存在。如果帖子不存在,我想要顯示postList路線。

我該怎麼做?我想我可以用triggersEnter;但是,數據是在模板中訂閱的,因此我可能無法在路由器中使用triggersEnter

一個簡單的方法是將填充從模板輔助變量doesExists模板,只需使用

{{#if doesExists}} 
    [...] 
{{else}} 
    {{> postList}} 
{{/if}} 

,但我不認爲這是這樣做,因爲我必須做一個非常聰明的方式這在很多不同的模板中,我不能用這種方法將用戶重定向到postList路由。

+2

我會重新考慮這一UX模式。如果用戶期望看到給定帖子的詳細信息,而不是看到帖子列表(或者更糟糕的是正在重定向到帖子列表),而沒有任何跡象表明帖子不可用,那麼我會認爲這是可用性問題。 – MasterAM

+0

你說得對。我可以使用我在我的問題中寫的模式;然而,當用戶點擊帖子時,他會看到不同的佈局和特定於該帖子的子導航,所以當帖子不存在時,子導航變得非常奇怪。理想情況下,我可以使用我在流路由器中配置的'notFound' – Jamgreen

回答

0

如果你有模板級別訂閱,如:

Template.YOUR_TEMPLATE_HERE.onCreated(function() { 
    let self = this; 
    self.autorun(function() { 
    self.subscribe('posts'); 
    }) 
}); 

然後你就可以用triggersEnter重定向,像這樣:

triggersEnter: [function(context, redirect) { 
    if (Posts.find({_id:context.params.id}).count() < 1) 
    redirect('/postslist'); 
}], 
相關問題