2015-10-18 50 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>