2014-09-30 95 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'); 
}, 
相关问题