所以,我试图做以下事情:
if(Meteor.isServer){
Meteor.methods({connect_to_api: function(vars){
// get data from remote API
return data;
}});
}
if(Meteor.isClient){
Template.myTpl.content = function(){
Meteor.call('connect_to_api', vars, function(err,data){
Session.set('placeholder', data);
});
return Session.get('placeholder');
};
}
这似乎工作得很好,但是,当然,当从服务器中删除Session对象时,现在在0.5.9中断。你现在在世界上如何创建一个使用仅服务器(我们不想在客户端加载的东西)方法调用的反应模板,并从该Method调用中获取数据。您不能在回调函数中放置任何会话引用,因为它在服务器上不存在,并且我不知道此方案可用的任何其他响应数据源。
我对Meteor很陌生,所以我真的想要确定最有可能成为面向未来的最佳实践。显然上面的实现不是它。
编辑:澄清一下,这不是我从模板函数返回时的问题。这是服务器上存在的Session问题。上面的代码将在服务器上生成以下错误消息:
Exception while invoking method 'connect_to_api' ReferenceError: Session is not defined
at Meteor.methods.connect_to_api (path/to/file.js:#:#)
at _.extend.protocol_handlers.method.exception ... etc etc
答案 0 :(得分:1)
在回调中设置会话似乎工作正常,请参阅我在github上创建的这个项目:https://github.com/jtblin/meteor_session_test。在此示例中,我以服务器方法返回数据,并在回调中的会话中设置它。
您的代码有两个问题:
1)Meteor.methods
中缺少右括号位置。代码应该是:
Meteor.methods({
connect_to_api: function(vars) {
// get data from remote API
return data;
}
});
2)如上所述,在回调完成之前,即在回调方法有时间设置会话变量之前,返回会话中的值。我想这就是你在会话变量中没有看到任何数据的原因。
答案 1 :(得分:0)
我觉得自己像个白痴(不是第一次,不是最后一次)。感谢jtblin告诉我Session.set确实在回调中工作,我回过头来搜索我的Meteor.method函数。事实证明,在我使用Session.get的代码中埋藏了一个地方,这就是抛出错误的原因。一旦我从客户端传递了这个价值,而不是试图在方法本身中获得它,那么这一切对世界都是正确的。
哦,你确实可以毫无问题地订购上述东西。