2015-04-03 46 views
0

我想訂閱特定頁面上的數據,所以我把subscribe()放在router.js的內部。我不確定是否應該把它放在Meteor.isClient()區塊內。我是不是該?我什麼時候會爲服務器端做路由?訂閱路由器

Router.route('/courses/:_id', function() { 
    if (Meteor.isClient) { 
    Meteor.subscribe("comments"); 
    } 
    this.render('CourseDetail', { .. }); 
}); 

回答

0

而是把if (Meteor.isClient){}檢查你的router.js文件裏的,你可以簡單地刪除檢查,並把該文件的頂級client文件夾內的應用程序目錄。這樣,您就不必擔心在服務器上處理您的路線了。在做出這樣的轉變,你可以構建上述路線定義的兩種方法之一:

Router.route('/courses/:id', function() { 
    this.wait(Meteor.subscribe('comments')); // Either this one 
    this.subscribe('comments').wait(); // or this one. DO NOT DO BOTH. 

    if(this.ready()) { 
     this.render(); 
    } else { 
     this.render('CourseDetail'); 
    } 
}); 

或:

Router.route('/courses/:id', { 
    subscriptions: function() { 
     this.subscribe('comments'); 
    }, 
    action: function() { 
     this.render('CourseDetail'); 
    } 
}); 

注意,第一個選項傳遞函數作爲第二個參數Router.route()功能而第二個選項將對象作爲第二個參數傳遞給Router.route()函數。這兩個選項都非常有效。有關第一個選項的信息,請檢查this;有關第二個選項的信息,請查看this

至於什麼時候你會做服務器端路由,通常這是通過設置你的應用的HTTP請求/響應部分來訪問你的服務器的外部應用來完成的。除非是這種情況,否則你很可能永遠不需要擔心設置這樣的事情。但是,在這樣做的情況下,您可以定義您的路線並將它們放入應用程序目錄中的頂層server文件夾中。有關服務器端路由的信息,請檢查this

0

無需使用流星包裝。鐵路由器有自己的語法來說明你想要你的路線運行的地方。

這裏是一個例子。

Router.route('/item', function() { var req = this.request; var res = this.response; res.end('hello from the server\n'); }, {where: 'server'}); 

這裏是文檔站點。

https://github.com/iron-meteor/iron-router/blob/devel/Guide.md

0

你應該定義在鐵路由器路由onBeforeAction選擇訂閱。

Router.route('/courses/:_id', function() { 
    onBeforeAction: function() { 
     Meteor.subscribe("comments"); 
    }, 
    action: function(){ 
     this.render('CourseDetail', { .. }); 
    } 
}); 

Source

相關問題