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'}})、Dev Tools で実行すると、テンプレートによってニュース フィードの並べ替えが更新され、変更されます。

そうならないようにするにはどうすればいいですか?:D

4

2 に答える 2

3

これは間違いなく Meteor のバグです。合格reactive: falseとは、minimongo 自体が「監視し、変更された場合は無効にする」というコードを設定していないことを意味します。ただし#each、監視コールバックを直接使用して(反応的な「無効化と再計算」ではなく)リストを更新する独自のobserveChanges呼び出しがあります。カーソルが上にある場合は、おそらくこれを行うべきではありませんreactive: falsehttps://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 に答える