我刚开始在流星中使用铁质路由器。如何隐藏或删除模板,或将其替换为另一个模板?
我有两条客户端路线。一个显示用户可以加入的聊天室列表:
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>
现在,如果我转到/
并单击一个房间,房间会在其下面呈现。但我真正想要的是显示room
或roomList
。如何在创建roomList
时删除room
,还是可以以某种方式将其替换为room
?
答案 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'});
});