【问题标题】:Return server-side calculation to client without using a collection不使用集合将服务器端计算返回给客户端
【发布时间】:2016-03-24 00:24:04
【问题描述】:

数据在客户端生成并保存在本地集合中:

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;
}

现在我想在客户端显示这个计算数据而不将其保存在服务器端数据库中。

问题:如何将这些数据传递给客户端?

【问题讨论】:

  • 为什么不只是 return 它来自您的方法? calculateDouble 是同步还是异步?
  • 基本值来自数据库并保存在本地集合中。每个用户都可以根据自己的条件修改这些值。为了进一步评估,这些值被传递给服务器,重新计算,然后它们应该被传递回客户端以显示。所以我的问题是:如何在模板辅助函数中使用返回值?

标签: javascript meteor


【解决方案1】:

只需从方法中返回数据:

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.
        });
    }
});  

【讨论】:

  • 谢谢 - 我的问题是:我如何从模板助手访问这个方法?因为我没有数据库来发布方法的返回值。
  • 您可以将其放入客户端上的Session 变量中,或者是反应式变量,或者全局偶数。
  • 行得通!谢谢!我只是将错误参数添加到您的回调函数中,否则它只会返回“未定义”。 @MichelFloyd - 使用 Session 变量是什么意思?不使用 Meteor.call?
  • Meteor.call("processData",localData,function(result){Session.set("myVar",result)});
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-05
  • 2018-02-03
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多