1

我有一个新闻提要的想法,我正在 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>

如果我随后Newsfeed.update({_id: 'some_random_id'}, {$set: {date_created: 'some_random_date'}})在开发工具中运行,模板会更新我的新闻提要的排序并对其进行更改。

我怎样才能让它不那样做?:D

4

2 回答 2

3

这可以说是 Meteor 中的一个错误。通过reactive: false意味着 minimongo 本身没有设置一些代码来说“观察,如果它发生变化,则无效”。但是#each有自己单独的 observeChanges 调用,它直接使用观察回调(不是反应性的“无效和重新计算”)来更新列表。如果光标reactive: false在上面,我们可能不应该这样做。在https://github.com/meteor/meteor/issues/771中跟踪这个!

于 2013-03-04T05:24:26.433 回答
0

这有点奇怪,它应该工作。你也可以使用preserve

尝试在您的客户端 js 中添加这一行

Template.feed.preserve(['#feed-wrapper']);

顺便说一句,template name="feed"在另一个模板中?这个模板中是否有任何反应变量?

于 2013-03-03T16:17:38.303 回答