2016-02-02 2 views
2

Итак, я много читал о обсуждении Iron Router vs FlowRouter.Миграция в FlowRouter нуждается в чем-то подобном контексту данных шаблона

Я начал свой проект с помощью Iron Router, но с тех пор передумал, и сейчас я перехожу на FlowRouter.

Все прошло гладко, пока я не начал переносить раздел комментариев моего приложения. Вы видите, этот раздел повторно несколько раз на приложение, он служит в качестве комментария раздел для новостей, сообщений, фотографий, видео и т.д.

Пример использования контекста данных НП:

Router.route('/news/:slug', { 
    name: 'newsItem', 
    waitOn: function() { Meteor.subscribe('news.single', this.params.slug) }, 
    data: function() { 
     return News.findOne({slug: this.params.slug}); 
    } 
}); 

<template name="newsItem"> 
    <p>{{title}}</p> 
    <p>{{body}}</p> 
    {{> commentSection}} 
</template> 

Коллекция Комментарии schema имеет «тип» (знать, к какому типу «вещь» относится этот комментарий, новости, фотографии и т. д.). Этот тип был установлен в событии «form .submit» шаблона commentSection. Пример:

'submit form': function(e, template) { 
    e.preventDefault(); 
    var $body = $(e.target).find('[name=body]'); 
    console.log(template.data.type); 
    var comment = { 
    type: template.data.type, 
    parentId: template.data._id, 
    parentSlug: template.data.slug, 
    body: $body.val() 
    }; 
    Meteor.call('insertComment', comment, function(error, commentId) { 
    if (error){ 
     alert(error.reason); 
    } else { 
     $body.val(''); 
    } 
    }); 
} 

Это работает, так как контекст шаблона данных содержал пункт новостей, который в свою очередь, имеет свойство типа А, а также.

Как я могу достичь чего-то подобного этому только с помощью Flow Router без установки данных на шаблоне, как это рекомендовано официальным руководством?

ответ

2

Возможно, вы захотите использовать подписку на шаблон и {{#with}} помощник.

Template.newsItem.onCreated(function() { 
    Template.instance().subscribe('news.single', FlowRouter.current().params.slug); 
}); 

Template.newsItem.helpers({ 
    item() { 
     let item = News.findOne(); 
     if(item) { 
      return item; 
     } 
    } 
}); 

<template name="newsItem"> 
    {{#with item}} 
     <!-- Your existing stuff --> 
    {{/with}} 
</template> 
+0

Да, я уже это сделал. Однако я не заключил в нее {{> commentSection}}. Ваш комментарий заставил меня сделать это, поэтому я приму это как ответ. Благодаря! – pedropeixoto