2015-10-18 34 views
0

我很新來流星(昨天開始),所以忍受着我。如何獲得模板助手變爲非響應?

我已經得到了以下嘗試從服務器獲取一些信息:

var messages = new Mongo.Collection('messages'); 

if (Meteor.isServer) { 

    //Initial first few messages 

    Meteor.publish("messages", function() { 
     return messages.find({}, {sort: {createdAt : -1}, limit: 2, reactive : false}); 
    }); 
} 

然後在模板助手:

Template.card.helpers({ 
    messages: function() { 
     return messages.find({}); 
    } 
}); 

模板:

<div class="messages-slider"> 
    {{#each messages}} 
     {{> message}} 
    {{/each}} 
</div> 

我想獲得第一對消息,並保持它們在DOM中靜態,基本上 - 但是,與上述無論如何編碼模板更新與集合。我如何解決它?

回答

1

find的reactive選項僅爲客戶端。使用它放在你的助手:

Session.set('ready', false); 
Meteor.subscribe('messages', { onReady: function() { 
    Session.set('ready', true); 
}}); 

Template.card.helpers({ 
    messages: function() { 
     if (Session.get('ready')) { 
      return messages.find({}, {reactive: false}); 
     } 
    } 
}); 
+0

當我做這個模板沒有任何輸出。 – styke

+0

,因爲它在客戶端顯示一些數據之前呈現。嘗試打印結果並測試有無{{reactive:false}' – Ser

+0

好吧,我更新了代碼來說明這一點。現在,幫助者在訂閱的準備就緒方面處於被動狀態,但在收集的變化方面不應該被動。 –

0

參考基督教的回答:

我想你也許可以解決與呈現前最訂閱的是準備的問題在{{#if Template.subscriptionsReady}]包裝的模板,以便它直到加載訂閱纔會呈現。在這種情況下,不需要Session變量。例如:

Template.card.onCreated(function(){ 
    var instance = this; 
    instance.autorun(function() { 
     instance.subscribe('messages'); 
    }); 
}); 

Template.card.helpers({ 
    messages: function() { 
     messages.find({},{reactive:false}); 
    } 
}); 

模板:

<template name="card"> 
    {{#if Template.subscriptionsReady}} 
     <div class="messages-slider"> 
      {{#each messages}} 
       {{> message}} 
      {{/each}} 
     </div> 
    {{/if}} 
</template>