一些背景信息:Meteor 的原则之一是“网络上的数据”,这意味着只有最基本的必需品(实际数据)被发送到客户端,因此您不能在服务器上编译模板并将它们发送到客户端。当然从技术上讲这是可能的,并且在某些情况下您想要这样做(例如在发送 html 电子邮件时),但通常这是一个坏主意。
在 Meteor 方法中调用 Blaze 渲染函数将不起作用,因为 Blaze 在客户端运行,而您的方法在服务器端。您应该像这样在客户端渲染 Meteor.call:
Meteor.methods({
adventure: function () {
if(Meteor.user().adv > 0) {
Meteor.users.update({_id: this.userId}, {$inc: {'adv': -1 }});
return true;
}
return false;
}
});
在客户端:
Meteor.call('adventure', function (error, result) {
if (error) {
// do something
}
else {
if(result)
Blaze.render(Template.adv, $('body').get(0);
else
Blaze.render(Template.noadventures, $('body').get(0);
}
}
为什么需要调用 Blaze.render?你为什么不在模板中这样做,比如
{{> Template.dynamic template=template}}