题
我试过了 了解这篇文章关于这个概念, 但是,我没有得到它。我有以下简单的设置:
/server/test.js
Meteor.methods({
abc: function() {
var result = {};
result.foo = "Hello ";
result.bar = "World!";
return result;
}
});
/client/myapp.js
var q = Meteor.call('abc');
console.log(q);
此结构返回到控制台 undefined
.
如果我改变 myapp.js
档案至:
Meteor.call('abc', function(err, data) {
!err ? console.log(data) : console.log(err);
}
我收到 Object
在我的控制台里。
理想情况下,这是我希望能够做的,但它不起作用,在控制台中说明: Cannot read property 'greeting' of undefined
/client/myapp.js
var q = Meteor.call('abc');
Template.hello.greeting = function() {
return q.foo;
}
将数据从服务器对象传递到模板中的任何帮助都将不胜感激。我还在学习JavaScript和流星。
谢谢!
解决方案
在客户端上,如果您未通过回调并且您不在存根内,则调用将返回未定义,并且您将无法获得方法的返回值。这是因为客户端没有纤维,所以它实际上没有任何方式可以阻止对方法的远程执行。
所以,你想要这样做:
.Meteor.call('abc', function(err, data) { if (err) console.log(err); Session.set('q', data); }); Template.hello.greeting = function() { return Session.get('q').foo; };
这将在数据可用后反动地更新模板。
其他提示
发生这种情况是因为 Npm.require
具有异步行为。这就是你必须编写回调的原因 Meteor.call
.
但是有一个解决方案,只需使用 install(mrt add npm)
你会得到一个名为 Meteor.sync(//...)
有了这个,你可以做两个游戏:同步和异步在您的 Meteor.call()
.
参考资料: http://www.sitepoint.com/create-a-meteor-app-using-npm-module/
我去了贫民区解决方案。但是,它适合我,这是对我来说重要的。下面是我的代码,在概念中,我认为,解决了OP的问题。
在客户端的main.js中:
Meteor.setInterval(function() {
confirmLogin();
}, 5000);
.
这五秒钟运行Confionlogin()函数。
confignlogin函数(在客户端的main.js中):
function confirmLogin() {
Meteor.call('loggedIn', function (error, result) {
Session.set("loggedIn", result);
});
}
.
logggein方法(在服务器的main.js中):
loggedIn: function () {
var toReturn = false;
var userDetails = Meteor.user();
if (typeof userDetails["services"] !== "undefined") {
if (typeof userDetails["services"]["facebook"] != "undefined") {
toReturn = true;
}
}
return toReturn;
},
.
相关的帮助:
loggedIn: function () {
return Session.get("loggedIn");
}
.