0

コレクション (GraphData) サブスクリプションを Meteor.autorun で変更して、クライアント側のキャッシュを制限しようとしています。しかし、サーバー側は、セッション (ブラウザー GUI) が変更された後にのみデータを公開することに気付きました。あれは正しいですか?

クライアント側には、次の coffeescript コードがあります。

Meteor.startup ->  
  Meteor.autorun () ->
    Meteor.subscribe 'graphdata', Session.get 'graph_name'

関数 draw_graph では、

Session.set 'graph_sub', false    
Session.set 'graph_name', item_name
ready = Session.get 'graph_sub'
while !(ready)    
  Meteor.setTimeout (ready = Session.get 'graph_sub'), 1000
Do something with the GraphData subscription

私が持っているサーバー側で

Meteor.startup ->  
  Meteor.publish 'graphdata', (name) -> 
    if name?
      GraphData.find({name: name})
      Session.set 'graph_sub', true

サーバー側のパブリッシュが Session.set 'graph_name', item_name の後にトリガーされることを期待していましたが、while ループでスタックしていることに気付きました。

私の理解は正しいですか?とにかく、セッションを変更せずにサーバー側でセッション変数の変更が通知されるようにするにはどうすればよいですか?

4

2 に答える 2

0
while !(Session.get 'graph_sub')    
  Meteor.setTimeout (Session.get 'graph_sub'), 1000

2行目はすべきではありませんSession.setか?それ以外の場合、セッション値は変更されず、whileループは終了しません。

タイプミスのほかに、そもそもなぜとを使用しているのか混乱していますsetTimeoutgraph_subこれで十分ではないでしょうか?

if Meteor.isClient
  Meteor.startup ->
    Meteor.autorun ->
      Meteor.subscribe 'graphdata', Session.get 'graph_name'

if Meteor.isServer
  Meteor.startup ->
    Meteor.publish 'graphdata', (name) ->
      GraphData.find name: name
于 2013-03-19T19:54:08.770 に答える
0

Do something with the GraphData subscriptionのコールバックにすべきだと思いますMeteor.subscribe

Meteor.startup ->  
  Meteor.autorun () ->
    Meteor.subscribe 'graphdata', Session.get 'graph_name', () ->
      Do something with the GraphData subscription

また、セッションは 0.5.8 以降、サーバー側では使用できないことに注意してください: https://github.com/meteor/meteor/blob/master/History.md#v058

于 2013-03-20T10:16:19.110 に答える