Метеор: Где разместить общие функции шаблона (лучшие практики)

Где я должен разместить функции, которые являются общими для определенного шаблона?

Например, функция, которая вызывается из разных событий внутри шаблона.

Это по-прежнему считается помощником, хотя я не хочу вызывать функцию в своем шаблоне, например {{foo}}?


person Linus    schedule 21.01.2015    source источник


Ответы (1)


Если эти функции используют базовые свойства и методы экземпляра шаблона, вы можете прикрепить их к экземпляру, вот простой пример формы подписки на информационный бюллетень:

HTML

<template name="newsletterForm">
  <form>
    <div class="alert {{alertClass}}">{{alertText}}</div>
    <div class="form-group">
      <label for="address">Email</label>
      <input id="address" type="email" class="form-control" name="address">
    </div>
    <button type="submit" class="btn btn-primary">Submit</button>
  </form>
</template>

JS

Template.newsletterForm.created=function(){
  this.alertClass=new ReactiveVar("alert-primary");
  this.alertText=new ReactiveVar("Subscribe to our newsletter, we'll send you the best links each week !");
  //
  this.subscribeSuccess=function(){
    this.alertClass.set("alert-success");
    this.alertText.set("Thanks for subscribing !");
  };
  this.subscribeFailure=function(){
    this.alertClass.set("alert-warning");
    this.alertText.set("Could't subscribe you to the newsletter, please double-check your email address !");
  };
};

Template.newsletterForm.helpers({
  alertClass:function(){
    return Template.instance().alertClass.get();
  },
  alertText:function(){
    return Template.instance().alertText.get();
  }
});

Template.newsletterForm.events({
  "submit":function(event,template){
    event.preventDefault();
    //
    var address=template.$("[type='email']").val();
    Meteor.call("newsletterSubscribe",address,function(error,result){
      if(error){
        template.subscribeFailure();
        return;
      }
      template.subscribeSuccess();
      template.find("form").reset();
    });
  }
});

Если они не используют какие-либо свойства, специфичные для экземпляра шаблона, вы можете просто объявить их как функции с файловой областью:

function commonFunc(){
}

Если эти функции не предназначены для использования в качестве помощников, я думаю, что нет необходимости объявлять их как таковые.

person saimeunt    schedule 21.01.2015
comment
Спасибо, это кажется хорошим способом. Я думаю, что объявление их помощниками просто приведет к путанице. - person Linus; 21.01.2015
comment
Отредактировал мой ответ, чтобы использовать реальный пример. - person saimeunt; 21.01.2015