如果一个对象不存在,重定向到Meteor中的不同路由
问题描述:
我有一个路径postDetail
,路径/posts/:postId
使用流路由器。如果一个对象不存在,重定向到Meteor中的不同路由
我想检查帖子是否确实存在。如果帖子不存在,我想要显示postList
路线。
我该怎么做?我想我可以用triggersEnter
;但是,数据是在模板中订阅的,因此我可能无法在路由器中使用triggersEnter
。
一个简单的方法是将填充从模板辅助变量doesExists
模板,只需使用
{{#if doesExists}}
[...]
{{else}}
{{> postList}}
{{/if}}
,但我不认为这是这样做,因为我必须做一个非常聪明的方式这在很多不同的模板中,我不能用这种方法将用户重定向到postList路由。
答
如果你有模板级别订阅,如:
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');
}],
我会重新考虑这一UX模式。如果用户期望看到给定帖子的详细信息,而不是看到帖子列表(或者更糟糕的是正在重定向到帖子列表),而没有任何迹象表明帖子不可用,那么我会认为这是可用性问题。 – MasterAM
你说得对。我可以使用我在我的问题中写的模式;然而,当用户点击帖子时,他会看到不同的布局和特定于该帖子的子导航,所以当帖子不存在时,子导航变得非常奇怪。理想情况下,我可以使用我在流路由器中配置的'notFound' – Jamgreen