2014-09-30 97 views
0

我有一個data-trackingId鏈接列表,基本上只是Random.id()的值。我目前設置的方式是,單擊鏈接時,跟蹤ID將發送到服務器,並更新相關集合。流星:如何更好地更新服務器或客戶端上的記錄

問題是客戶端不會自動更新,它需要頁面刷新來更新鏈接列表。

我需要設置一個active標誌並增加clickcount。我可以通過使用我想要更新的collection的_id作爲trackingId來實現此目的(因爲不可信代碼只能通過_id更新)。

但是,我不希望客戶端能夠運行查詢,該查詢將設置active標誌或增加clickcount,從而繞過點擊鏈接的整個點。

什麼是最好的方法來解決這個問題?我能想到的唯一的事情可能是在發佈/訂閱方法(我不太熟悉)中設置某種權限,或者在調用Meteor.call('serverMethod', trackingId)時使用回調,以便我可以再次取回鏈接列表。我會認爲它最好使用客戶端和設置權限,但我不確定我需要做什麼。

歡迎所有建議:)

+0

在我的記憶,你可以創建自己的 「反應變量」 ..但我建議使用Meteor.call。它爲我節省了很多時間:D – Nokdu 2014-09-30 02:45:28

+0

是的,我現在使用Meteor.call,它工作,只是沒有反應。我會考慮一下,歡呼:) – user1532669 2014-09-30 13:09:15

回答

0

我使用回調函數解決了這個問題。如果任何人有任何更好的建議,我打開替代品。

在客戶端代碼:

Meteor.call('updateTracking', Session.get('trackingId'), function(err, data){ 
                 if(err){ 
                  console.log(err) 
                 } 
                 Session.set('links', data); 
                }); 

在server.js

updateTracking: function(trackingId){ 
    console.log('trackingId: ' + trackingId) 
    Tracking.update({ trackingId: trackingId}, 
           {$set: {active: 0}, 
           $inc: {clickcount: 1} 
          }); 
    return Meteor.call('getLinks'); 
}, 
相關問題