我有一个我在Meteor尝试的新闻提要,但是我遇到了让该死的事情表现出来的问题:)我想让它在页面加载/刷新时加载新闻提要,但不是当数据发生变化时我在文档中发现,将{reactive: false}
添加到集合的find方法应该使它坚持渲染时生成的结果,但它似乎对我不起作用。 Meteor不断更新模板。
这是我得到的代码:
在服务器端:
Meteor.publish("newsfeed", function () {
return Newsfeed.find({});
});
在客户端:
Meteor.subscribe('newsfeed');
Template.feed.feed_data = function() {
var feed = Newsfeed.find({}, {
sort: {updated_time: -1},
limit: 10,
reactive: false
});
return feed;
};
在模板中:
<template name="feed">
<div id="feed-wrapper">
<ul>
{{#each feed_data}}
<li>
<div class="message">{{message}}</div>
</li>
{{/each}}
</ul>
</div>
</template>
如果我在Dev Tools中运行Newsfeed.update({_id: 'some_random_id'}, {$set: {date_created: 'some_random_date'}})
,模板会更新我的新闻Feed的排序并进行更改。
如何让它不那样做? :d
答案 0 :(得分:3)
这可以说是Meteor中的一个错误。传递reactive: false
意味着minimongo本身不会设置一些代码来说“观察它是否发生变化,无效”。但#each
有自己独立的observeChanges调用,它直接使用observe回调(不是反应性的“invalidate and recalculate”)来更新列表。如果光标上有reactive: false
,我们可能不应该这样做。在https://github.com/meteor/meteor/issues/771进行跟踪!
答案 1 :(得分:0)
有点奇怪,它应该有效。您也可以使用preserve:
尝试在客户端js中添加此行
Template.feed.preserve(['#feed-wrapper']);
Btw是另一个模板中的template name="feed"
?该模板中是否包含任何反应变量?