我有一个游戏,如果他们有任何冒险,我想要一个渲染模板的系统。
Meteor.methods({
adventure: function () {
if(Meteor.user().adv > 0)
{
Meteor.users.update({_id: this.userId}, {$inc: {'adv': -1 }});
this.render('adv');
}
else
{
this.render('noadventures');
}
},
})
我有一个名为adv的模板,但它不会加载..
答案 0 :(得分:1)
使用Blaze.render或Blaze.renderWithData - 就像这样:
Meteor.methods({
adventure: function () {
if(Meteor.user().adv > 0)
{
Meteor.users.update({_id: this.userId}, {$inc: {'adv': -1 }});
Blaze.render(Template.adv, $('body').get(0);
}
else
{
Blaze.render(Template.noadventures, $('body').get(0);
}
},
})
你可以做更多 - documentation非常好。
答案 1 :(得分:1)
一些背景信息:其中一个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}}