带功能的流星渲染模板

时间:2015-03-06 16:31:41

标签: templates meteor render router iron

我有一个游戏,如果他们有任何冒险,我想要一个渲染模板的系统。

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的模板,但它不会加载..

2 个答案:

答案 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}}