Перенаправить на другой маршрут в Meteor, если объект не существует

У меня есть маршрут postDetail с путем /posts/:postId с использованием Flow Router.

Я хочу проверить, существует ли пост на самом деле. Если сообщение не существует, вместо этого я хочу показать маршрут postList.

Как я могу это сделать? Думаю, я могу использовать triggersEnter; однако данные подписаны в шаблоне, поэтому, возможно, я не могу использовать triggersEnter в маршрутизаторе.

Простым способом было бы заполнить шаблон переменной doesExists из помощника шаблона и просто использовать

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

но я не думаю, что это очень умный способ сделать это, потому что мне приходится делать это во многих разных шаблонах, и я не могу перенаправить пользователя на маршрут postList с таким подходом.


person Jamgreen    schedule 13.11.2015    source источник
comment
Я бы пересмотрел этот шаблон UX. Если пользователь ожидает увидеть подробности данного поста, а вместо этого видит список постов (или, что еще хуже, перенаправляется на него) без каких-либо указаний на то, что пост недоступен, то я бы счел это удобством использования. проблема.   -  person MasterAM    schedule 13.11.2015
comment
Ты прав. Вероятно, я мог бы использовать шаблон, который я написал в своем вопросе; однако, когда пользователь нажимает на сообщение, он видит другой макет с дополнительной навигацией, характерной для этой записи, поэтому поднавигация становится очень странной, когда сообщения не существует. В идеале я мог бы просто использовать свой notFound, настроенный в Flow Router.   -  person Jamgreen    schedule 13.11.2015


Ответы (1)


Если у вас есть подписки на уровне шаблона, такие как:

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');
}],
person Viktor Marinov    schedule 13.01.2016