1

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

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

4

2 回答 2

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);
    }
  },      
})

你可以用这个做更多 -文档非常好。

于 2015-03-06T19:15:27.063 回答
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}}
于 2015-03-07T14:07:48.957 回答