如何定义一个可以在模板助手中调用的 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”一个普通字符串时,一切正常。但在这种情况下,我的模板没有任何价值。我为了测试而在同一个文件中定义了该方法,其中该方法是一个普通函数,并尝试调用该函数。我得到的错误是该函数不存在。所以我认为 Meteor 会在了解我为其定义的方法之前尝试渲染模板。但我认为这有点不寻常——不是吗?
现在有一种新方法可以做到这一点(Meteor 0.9.3.1),它不会污染会话名称空间
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 http://docs.meteor.com/#reactivevar)并将其附加到模板实例。
然后,您调用您的方法,当回调触发时,您将返回的值附加到反应变量。
然后,您可以设置帮助程序以返回反应变量的值(现在附加到模板实例),并且当方法返回时它将重新运行。
但请注意,您必须添加reactive-var包才能使其工作
$ meteor add reactive-var
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)