如何让模板帮助器变成非响应式的?
How do I get a template helper to become non reactive?
我是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中的静态,基本上-然而,与上面的代码模板更新与集合不管。我怎么修理它?
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});
}
}
});
参考Christian的回答:
我认为你可以通过在{{#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>
相关文章:
- 需要帮助设置json数组
- JQuery需要帮助理解(i,el)
- 如何在输入字段中的按钮的帮助下打开日历,该字段的类型为“=”;日期”;
- 如何将getJson的响应保存在全局变量中
- 如何使用Spring MVC将Facebook返回的响应数据保存在Java类中
- 需要帮助谷歌地图方向面板在FancyBox中显示
- 使用angularjs向浏览器发送servlet响应(下载功能)
- MockJax没有在JavaScript应用程序中发送对我AJAX请求的响应
- 不再使用innerHTML进行AJAX响应.(代码未得到响应)
- 我需要为我的朋友在这个项目上提供帮助
- 为什么可以't我使用了AJAX响应的一部分
- 使用密码对话框Javascript请求帮助
- 响应动画手风琴不工作
- JavaScript计算帮助(乘以时间)
- 需要帮助编辑响应式菜单的 JavaScript 文件
- 需要帮助实现响应径向菜单的jquery参数
- 如何让模板帮助器变成非响应式的?
- 需要帮助解析Jquery Ajax XML响应
- 我需要帮助通过POST发送JSON并获得响应
- 需要帮助从jquery响应中选择元素