我如何定义一个 Meteor 方法,它也可以在模板助手中调用?
我有这两个文件:
文件:lib/test.js
Meteor.methods({
viewTest : function (str) {
return str;
}
});
文件:客户端/myView.js
Template.helloWorld.helpers({
txt : function () {
var str = Meteor.call('viewTest', 'Hello World.');
return str;
}
});
当我给“str”一个普通字符串时,一切正常。但在这种情况下,我的模板没有任何值(value)。我在同一文件中定义了 - 为了测试 - 在该文件中该方法是一个普通函数并尝试调用该函数。我得到的错误是该函数不存在。所以我认为 Meteor 在知道我为它定义的方法之前尝试渲染模板。但我认为这有点不寻常 - 不是吗?
最佳答案
现在有一种新方法(Meteor 0.9.3.1)不会污染 session 命名空间
Template.helloWorld.helpers({
txt: function () {
return Template.instance().myAsyncValue.get();
}
});
Template.helloWorld.created = function (){
var self = this;
self.myAsyncValue = new ReactiveVar("Waiting for response from server...");
Meteor.call('getAsyncValue', function (err, asyncValue) {
if (err)
console.log(err);
else
self.myAsyncValue.set(asyncValue);
});
}
在“已创建”回调中,您创建了一个 ReactiveVariable 的新实例(参见 docs)并将其附加到模板实例。
然后您调用您的方法,当回调触发时,您将返回值附加到 react 变量。
然后你可以设置你的助手来返回 react 变量的值(现在附加到模板实例),并且它会在方法返回时重新运行。
但请注意,您必须添加 reactive-var 包才能使其工作
$ meteor add reactive-var
关于javascript - 如何在模板助手中使用 Meteor 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22147813/