我对Meteor很新(昨天开始)所以请耐心等待。
我有以下内容尝试从服务器获取一些消息:
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中保持静态 - 但是,使用上面的代码,模板随集合更新,无论如何。我如何解决它?
答案 0 :(得分: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});
}
}
});
答案 1 :(得分: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>