尝试渲染模板时,我想从服务器加载数据。我正在尝试使用Meteor.call,但根据文档,我显然不在存根中。
如果我在事件处理程序中使用Meteor.call,我回复的响应是正确的。如果我在template.created或类似内容中调用它,我会得到一个未定义的响应。我想我可以使用异步调用来执行它,然后在可用时呈现它。但还有另一种方式吗?
我不希望客户端直接访问数据库,我希望它来自服务器。
//This doesn't work
Template.config.created = function() {
console.log(Meteor.call('getValue')); //returns undefined
};
//This works
Template.config.events({
'blur #button' : function () {
console.log(Meteor.call('getValue')); //Prints value
}
任何线索?
d
答案 0 :(得分:2)
来自文档:
在客户端上,如果你没有传递一个回调并且你不在存根中,
call
将返回undefined
,你将无法获得该方法的返回值。那是因为客户端没有光纤,因此实际上没有任何方法可以阻止远程执行方法。
我不确定为什么你的事件处理程序调用正在工作......没有任何方法可以在没有Fibers的JavaScript中同步获取服务器响应。解决方案只是提供异步回调。这不是真正的流星限制,它只是一个JavaScript限制。
答案 1 :(得分:2)
您需要在 Meteor.call
中使用回调Template.config.created = function() {
Meteor.call('getValue', function(error, data) {
if(error){
//do stuff to handle error
}
console.log(data);
});
};