2014-09-30 2 views
0

У меня есть список ссылок с data-trackingId, который в основном является только значением Random.id(). Способ, которым я сейчас настроен, заключается в том, что при нажатии ссылки идентификатор отслеживания отправляется на сервер, и соответствующая коллекция обновляется.Метеор: как лучше обновлять записи на сервере или клиенте

Проблема заключается в том, что клиент не обновляется автоматически, для обновления списка ссылок требуется обновление страницы.

Мне нужно установить флаг active и увеличить clickcount. Я мог бы достичь этого, используя _id коллекции, которую я хочу обновить, как trackId (поскольку ненадежный код может обновляться только _id).

Однако я не хочу, чтобы клиент мог выполнить запрос, который установил бы флаг active или увеличил бы clickcount, тем самым минуя всю точку нажатия ссылок.

Что было бы лучшим способом приблизиться к этому? Единственное, о чем я могу думать, - это, возможно, установить какое-то разрешение в методах публикации/подписки (которое я не слишком хорошо знаю) или использовать обратные вызовы при вызове Meteor.call('serverMethod', trackingId), чтобы я мог снова перебрать список ссылок. Я думаю, что, вероятно, лучше всего использовать клиент и установить разрешения, но я не уверен, что именно мне нужно будет сделать.

Все предложения приветствуются :)

+0

В моей памяти вы можете создавать свои собственные "реактивные переменные" .. но я бы предложил использовать Meteor.call. это сэкономило мне много времени: D – Nokdu

+0

Да, я использую Meteor.call в настоящий момент, и он работает, просто не реагирует. Я подумаю об этом, ура :) – user1532669

ответ

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'); 
}, 
Смежные вопросы