0

基於達恩·達斯卡萊斯卡的回答here,我想實現流星動態模板是這樣的:應該在Meteor應用程序中啓動Session值?

在main.html中:

<body TEXT="#000000"> 

<div class="container"> 
    {{> mnuScheduler}} 
    {{> Template.dynamic template=currentTemplate}} 
</div> 

</body> 

在main.js:

Template.body.helpers({ 
    currentTemplate: function() { 
    return Session.get('curTemplate'); 
    } 
}); 

但很明顯我需要啓動我的Session變量'curTemplate'到我要顯示的第一個模板,如:

Session.setDefault('curTemplate', 'tblScheduler'); 

...然後動態地設置它在其他地方是這樣的:

Session.set('curTemplate', somethingElseBasedOnContext); 

我的問題是,哪裏初始(setDefault)屬於?它應該是我main.js,與Template.body.helpers(沿在那裏我也有我的Meteor.subscribe(「BLA」)調用

回答

2

無論是以下三個位置都可以工作:?

if (Meteor.isClient) { 
    Session.set('curTemplate', 'tblScheduler');   // <--- 
    console.log('Meteor.isClient'); 

    Meteor.startup(function() { 
    //Session.set('curTemplate', 'tblScheduler')  // <--- 
    console.log('Meteor.startup'); 
    }); 

    Template.body.onCreated(function() { 
    //Session.set('curTemplate', 'tblScheduler')  // <--- 
    console.log('Template.body.onCreated'); 
    }); 

    Template.body.helpers({ 
    currentTemplate: function() { 
     return Session.get('curTemplate'); 
    }, 
    }); 
} 

這段代碼的瀏覽器日誌顯示這些被稱爲在啓動時的順序:

Meteor.isClient 
Template.body.onCreated 
Meteor.startup 

Meteor.startup不會運行,直到後DOM準備然而,是不是在這種情況下的一個因素

流星在如何構建應用程序方面非常靈活,所以最好在您的方法中保持一致。

在這裏你可以決定啓動代碼進入Meteor.startup塊,或者你可以決定,因爲它需要渲染正文模板,Template.body.onCreated是它的正確位置。但要儘量保持一致!

+0

Meteor.startup()可能也是調用Meteor.subscribe(「bla」)的首選位置,對吧? –

+1

對於您希望始終處於活動狀態的訂閱,這是放置Meteor.subscribe調用的好地方。 – JeremyK

+1

對於您希望始終處於活動狀態的訂閱,這是放置Meteor.subscribe調用的好地方。然而,在某些時候,您會希望查看模板特定的訂閱(在onRendered回調中訂閱),或者使用iron:router(或類似的)進行此操作。 但是,只要在if(Meteor.isClient){}塊(或在/ client目錄中)也可以在客戶端啓動時執行所有代碼。 – JeremyK

相關問題