Метеор: визуализировать шаблон внутри шаблона

У меня есть список имен в шаблоне «postlist». Это «имена пользователей» человека, создавшего сообщение. Я создал ссылку href, так что, когда пользователь нажимает на имя, он перенаправляется/направляется на новый шаблон «просмотр» и может просматривать полный почтовый документ.

Но я хотел бы, чтобы шаблон «viewpost» отображался там, где я вместо этого поместил {{> yield}} в шаблон «postlist». Как мне настроить layoutTemplate, потому что у меня уже есть один, работающий для другой части приложения.

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

Вспомните пример Meteor todos. В зависимости от того, нажимаете ли вы «присоединиться» или «войти», отображаются соответствующие шаблоны.

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

postlist.html (показывает список поля «полное имя» в почтовых документах).

<template name="postlist"> 
<div class="container">
<div class="col-sm-3">
    {{#each post}}
    <li><a href="{{pathFor 'viewpost'}}" >{{fullname}}</a></li>
    {{/each}}
</div>
</div>
{{> yield}}
</template>

router.js

Router.map(function(){
this.route('postlist',{
  path: '/postlist',
  template: 'postlist',
  waitOn: function(){
    return Meteor.subscribe('posts');
  },
  data: function(){
    return {post: Posts.find({})};
}
});
this.route('viewpost',{
  path: '/viewpost/:_id',
  template: 'viewpost',
   waitOn: function(){
    return Meteor.subscribe('posts');
  },
  data: function() { return Posts.findOne(this.params._id); }
});
});

person meteorBuzz    schedule 17.10.2014    source источник
comment
Вы можете создать 'yield region='post_body' и отображать сообщение в этом регионе. Подробнее читайте здесь manuel-schoebel.com/blog/iron-router-tutorial   -  person yoK0    schedule 17.10.2014


Ответы (1)


Поскольку между шаблоном «viewpost» и шаблоном «postlist» не так уж много совпадений контента, я думаю, что на самом деле будет чище просто использовать {{> viewpost currentPost}} вместо yield и установить currentPost программно. Например, в шаблоне списка постов у вас может быть переменная currentPost, которая возвращает данные для текущего поста, например:

Template.postlist.helpers({
    currentPost: function () {
        return Posts.findOne(Session.get('currentPost'));
    }
});

и просто установите сеанс при нажатии на ссылку в шаблоне постлиста.

person mark    schedule 17.10.2014
comment
{{> Template.dynamic template='viewpost' data=currentPost}} является антишаблоном для {{> viewpost currentPost}}. Точка с Template.dynamic имеет динамический шаблон. - person Peppe L-G; 17.10.2014
comment
@PeppeL-G Вы правы, я думал о немного другом варианте использования в одном из моих собственных приложений. Отредактировано, спасибо! :) - person mark; 17.10.2014