Шаблоны рендеринга метеоров с функциями

У меня есть игра, и я хочу систему, которая отображает шаблон, если у них остались какие-либо приключения.

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 ответа

Решение

Используйте 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);
    }
  },      
})

Вы можете сделать больше с этим - документация довольно хорошая.

Некоторая справочная информация: один из принципов Meteor - это "данные по проводам", то есть клиенту отправляются только самые важные данные (фактические данные), поэтому вы не можете скомпилировать шаблоны на сервере и отправить их клиенту. Конечно, технически это возможно, и есть сценарии, которые вам нужны (например, при отправке html-писем), но обычно это плохая идея.

Вызов функции рендеринга Blaze внутри метода Meteor не будет работать, потому что 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}}
Другие вопросы по тегам