2

そのため、Iron Router と FlowRouter の議論についてはたくさん読みました。

Iron Router を使用してプロジェクトを開始しましたが、考えが変わり、現在 FlowRouter に移行しています。

アプリのコメント セクションの移行を開始するまで、すべてが順調に進んでいました。ご覧のとおり、このセクションはアプリで数回再利用され、ニュース、投稿、写真、ビデオなどのコメント セクションとして機能します。

IR のデータ コンテキストを使用した例:

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>

コメント コレクション スキーマには「タイプ」があります (このコメントが属する「もの」、ニュース、写真などのタイプを知るため)。そのタイプは、commentSection テンプレートの「form .submit」イベントで設定されました。例:

'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のみを使用して、これと同様のことをどのように達成できますか?

4

1 に答える 1

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>
于 2016-02-02T16:29:58.920 に答える