2017-02-24 159 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'}); 
});