在铁路由器中销毁/删除流星模板

时间:2017-02-24 16:51:54

标签: meteor iron-router spacebars

我刚开始在流星中使用铁质路由器。如何隐藏或删除模板,或将其替换为另一个模板?

我有两条客户端路线。一个显示用户可以加入的聊天室列表:

Router.route('/', function () {
  this.layout('bodyLayout');
  this.render('roomList', {
    to: 'roomList'
  });
});

另一个是聊天室:

Router.route('/room/:_id', function () {
  this.layout('bodyLayout');
  var roomId = this.params._id;
  this.render('room', {
    to: 'room',
    data: () => {
      return { roomId }
    }
  });
});

它们都具有相同的布局,它们yield紧密相连:

<template name="bodyLayout">
    <!-- layout stuff -->

    {{> yield 'roomList'}}
    {{> yield 'room'}}

    <!-- layout stuff -->
</template>

现在,如果我转到/并单击一个房间,房间会在其下面呈现。但我真正想要的是显示roomroomList。如何在创建roomList时删除room,还是可以以某种方式将其替换为room

1 个答案:

答案 0 :(得分:0)

所以最终我找到了几个解决方案。

替换模板

如果某个位置只需要几个模板中的一个,这在我的情况下非常有用。事实证明,几条路线可以渲染到相同的yield。我们可以删除其中一个yield

<template name="bodyLayout">
    <!-- layout stuff -->

    {{> yield }}

    <!-- layout stuff -->
</template>

从我们传递给to的对象中移除this.render属性:

Router.route('/', function () {
  this.layout('bodyLayout');
  this.render('roomList');
});

Router.route('/room/:_id', function () {
  this.layout('bodyLayout');
  var roomId = this.params._id;
  this.render('room', {
    // We don't need this anymore:
    // to: 'room', 
    data: () => {
      return { roomId }
    }
  });
});

或者,请为yield命名:

<template name="bodyLayout">
    <!-- layout stuff -->

    {{> yield 'content' }}

    <!-- layout stuff -->
</template>

并且给两个路由器提供&#39;属性引用相同的yield

Router.route('/', function () {
  this.layout('bodyLayout');
  this.render('roomList', { to: 'content'});
});

Router.route('/room/:_id', function () {
  this.layout('bodyLayout');
  var roomId = this.params._id;
  this.render('room', {
    to: 'content',
    data: () => {
      return { roomId }
    }
  });
});

从路由器中删除模板

如果确实需要从路由器中删除模板,可以通过为this.render函数提供一个空字符串而不是模板名称来实现此目的,从而告诉它不为此产量呈现模板:

Router.route('/', function () {
  this.layout('bodyLayout');
  this.render('roomList', {
    to: 'roomList'
  });

  // Remove the room that was shown
  this.render('', { to: 'room'});
});
相关问题