2012-05-05 20 views

答えて

7

私は方法を提案します。

Meteor.methods({ 
    addItem: function (doc) { 
    doc.when = new Date; 
    return Items.insert(doc); 
    } 
}); 

クライアントがローカルでこれを実行すると、自身の現在の時刻にwhenを設定しますが、サーバーのタイムスタンプが優先され、元のクライアントを含むすべてのサブスクライブクライアントに伝播します。 doc.whenで並べ替えることができます。

おそらくドキュメントの検証とアクセス許可の一部としてタイムスタンプを自動的に設定するためのフックを追加します。

+0

偉大な、その作品、ありがとう! –

+0

'Date'オブジェクトの格納が機能するようになったので、実際にあなたの日付をmsで保存しない限り、必ず' getTime'を呼び出す必要はありません。 –

+0

かなり、ありがとう!更新しました。 – debergalis

1

あなたはこの空想Date.unow機能(することができます安全に並べ替えるには多くの文書が同じタイムスタンプを挿入した場合でも)と一緒に、これらのコレクションのフック(https://gist.github.com/matb33/5258260)のようなものを使用して喜んでいる場合:

if (!Date.unow) { 
    (function() { 
     var uniq = 0; 
     Date.unow = function() { 
      uniq++; 
      return Date.now() + (uniq % 5000); 
     }; 
    })(); 
} 

if (Meteor.isServer) { 
    // NOTE: this isn't vanilla Meteor, and sometime in the future there may be 
    // a better way of doing this, but at the time of writing this is it: 
    Items.before("insert", function (userId, doc) { 
     doc.created = Date.unow(); 
    }); 
} 
関連する問題