2017-02-24 157 views
0

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

我有两个客户端路由。其中显示聊天室列表的用户可以加入:

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。如何在创建room时删除roomList,或者我可以用room以某种方式替换它?

回答

0

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

更换模板

这是像我这样的情况下非常有用,如果某个位置只需要几个模板之一。事实证明,几条路线可以呈现相同的yield。我们可以删除yield S的一个:

<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> 

并给两个路由器提供相同的'to'属性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'}); 
});