2016-03-21 3 views
0

данных на клиенте генерируется и сохраненную в локальной коллекции:Возврат расчет на стороне сервера к клиенту без использования коллекции

ListLocal = new Mongo.Collection(null); 

let seed = [{ 
     name: "A", 
     value: 1 
    }, { 
     name: "B", 
     value: 2 
    }, { 
     name: "C", 
     value: 3 
    }]; 

    if (ListLocal.find().count() === 0) { 
     ListLocal.forEach(function(entry) { 
      ListLocal.insert(entry); 
     }); 
    }; 

Затем он передается на клиента на сервер для дальнейшей обработки:

Template.home.events({ 
    "click .btn-process": function(event) { 
     event.preventDefault(); 
     let localData = ListLocal.find({}).fetch(); 

     Meteor.call("processData", localData); 
    } 
}); 

Сервер принимает данные и передает их на серверный метод, который выполняет некоторые действия с ним, например. двойники всех значения переданных объектов:

Meteor.methods({ 
    processData(localData) { 
     calculateDouble(localData); 
    } 
}); 

calculateDouble(localData) { 
    // ... 
    return calculatedData; 
} 

Теперь я хочу, чтобы отобразить этот calculatedData на сторону клиента, не сохраняя его в серверной базе данных.

Вопрос: Как передать эти данные клиенту?

+0

Почему не просто 'return' его от вашего метода? Синхронизация 'calculateDouble' или async? –

+0

Базовые значения берутся из базы данных и сохраняются в локальной коллекции. каждый пользователь может изменять эти значения на своих условиях. Для дальнейшей эвакуляции значения передаются на сервер, пересчитываются и передаются обратно клиенту для отображения. Итак, мой вопрос: как я могу использовать возвращаемое значение в вспомогательной функции шаблона? – Raggamuffin

ответ

2

Просто вернуть данные из метода:

Meteor.methods({ 
    "processData": function(localData) { 
     return calculateDouble(localData); 
    } 
}); 

calculateDouble(localData) { 
    // ... 
    return calculatedData; 
} 

Для вызова метода в случае:

Template.home.events({ 
    "click .btn-process": function(event) { 
     event.preventDefault(); 
     let localData = ListLocal.find({}).fetch(); 

     Meteor.call("processData", localData, function(error, result){ 
      //handle what you need to do with the result here. 
     }); 
    } 
}); 
+0

Спасибо - мой вопрос: как мне получить доступ к этому методу из помощника шаблона? Поскольку у меня нет базы данных для публикации возвращаемого значения методов. – Raggamuffin

+0

Вы можете просто поместить его в переменную 'Session' на клиенте, или реактивную переменную, или глобальную четность. –

+0

Это работает! Благодаря! Я просто добавил параметр ошибки к вашей функции обратного вызова, иначе он просто возвращает «undefined». @MichelFloyd - как использовать переменную сеанса? Без использования Meteor.call? – Raggamuffin

Смежные вопросы