1

ストーリー: angular 1 で meteor 1.4 を使用しました。 を使用して "Todo" を非公開にしたいMeteor.publishのですが、クライアント コードは次のとおりです。

var now = new Date();
var start = new Date();
start.setHours(0, 0, 0, 0);
this.helpers({
    todos() {
    return Todos.find({createdAt: {$gte: start, $lt: now}, userId: Meteor.userId()}, {
            sort: {
                createdAt: -1
            }
        });
    },
    currentUser() {
        return Meteor.user();
    }
});

問題: "userId" を使用Meteor.publishすると、todo リストの ui がうまく機能し、新しい todo を 1 つ追加した後に ui を自動更新できました。しかし、 でMeteor.publishフィルターを追加した後createdAt: {$gte: start, $lt: now}、ページを更新 (F5) する必要があります。その後、新しい todo が表示されます。サーバー側の公開コードは次のとおりです。

Meteor.publish('todos', function tasksPublication() {
     var now = new Date();
     var start = new Date();
     start.setHours(0, 0, 0, 0);
     return Todos.find({createdAt: {$gte: start, $lt: now}, userId: this.userId});
});

誰でもそれを修正する方法を知っていますか?

4

1 に答える 1

0

このバグを修正しました。私は Meteor のキャッシュに詳しくなかったので、以下の理由は私の推測です:

  1. クライアント UI が cache(miniMongo) の "Todos.find({createdAt: {$gte: start, $lt: now}, userId: this.userId})" に集中していました。
  2. 新しい todo を 1 つ挿入したら、最初に miniMongo に挿入します。
  3. miniMongo は #1 クエリを再実行しますが、「今」は #1 回の「今」です。そして、#2の結果が適合しないことがわかりました。そのため、クライアントから新しいレコードを削除しました。

そして、ここに私の変更があります: コードの変更

何か違う考えがあれば教えてください。

ありがとう。

于 2016-12-19T10:01:28.847 に答える