上記のソリューションは 1 つの方法を示したと言わざるを得ませんが、observe() に接続されていないクライアント データにパブリッシュする必要がある場合はどうすればよいでしょうか? または任意のコレクションで?
私の場合、つまり1000個の製品があります。訪問者を引き付けるために、乱数の製品のタイムスタンプを更新し、コレクションをタイムスタンプで並べ替えて表示することで、コレクションを「リフレッシュ」しています。これのおかげで、訪問者は何かが起こっているという印象を受けます。
私のrefresh
メソッドは製品の数を返します (ランダムです)。その番号をすべてのクライアントに渡す必要があります。私はそれをしましたが、(私が思うに)醜い回避策を使用しています。
私のrefresh
メソッドは を設定しますSession.set('lastRandomNo', random)
。ところで:セッションがサーバー側で機能することを知りませんでした。refresh
製品コレクションを更新します。
次に、上記の回答に従って:
Meteor.publish 'refreshedProducts', ->
self = this
uuid = Meteor.uuid()
# create a new collection to pass ProductsMeta data
self.set('products_meta', uuid, { refreshedNo: 0 })
handle = Products.find().observe
changed: (newDocument, atIndex, oldDocument) ->
self.set('products_meta', uuid, { refreshedNo: Session.get('lastRandomNo') })
self.flush()
self.complete()
self.flush()
self.onStop ->
handle.stop()
そしてクライアント側で:
ProductsMeta = new Meteor.Collection('products_meta')
# subscribe to server 'products_meta' collection that is generated by server
Meteor.subscribe('refreshedProducts')
ProductsMeta.find({}).observe
changed: (newDocument, atIndex, oldDocument) ->
# I have access to refreshedNo by
console.log ProductsMeta.findOne().refreshedNo
どう思いますか?