Some backgroud info: one of the Meteor principles is "data on the wire", meaning only the bare neccessities are sent to the client (the actual data), so you can't compile templates on the server and send them to the client. Sure technically this is possible and there are scenarios you want this (for example when sending html emails), but generally it's a bad idea.
Calling a Blaze render function inside a Meteor method won't work, because Blaze runs on the client side, and your method is on the server side. You should render in Meteor.call on the client side like this:
Meteor.methods({
adventure: function () {
if(Meteor.user().adv > 0) {
Meteor.users.update({_id: this.userId}, {$inc: {'adv': -1 }});
return true;
}
return false;
}
});
And on the client side:
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);
}
}
Why do you need to call Blaze.render? Why don't you just do this in the template, something like
{{> Template.dynamic template=template}}