如何定义一个可以在模板助手中调用的 Meteor 方法?
我有这两个文件:
文件:lib/test.js
Meteor.methods({
viewTest : function (str) {
return str;
}
});
文件:client/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);
});
}
在“created”回调中,您创建 ReactiveVariable 的新实例(请参阅 docs )并将其附加到模板实例。
然后,您调用您的方法,当回调触发时,您将返回的值附加到 react 变量。
然后,您可以设置帮助程序以返回 react 变量的值(现在已附加到模板实例),并且当方法返回时它将重新运行。
但请注意,您必须添加reactive-var包才能使其工作
$ meteor add reactive-var
关于javascript - 如何在模板助手中使用 Meteor 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35967351/