wyc
wyc

Reputation: 55263

How to create a helper that I can use inside all the Template.template.events?

For example I have something like this:

post_form.js:

Template.postForm.events({
  "input #input-content": function() {

    var words, wordsNumber;

    Posts.update(this._id, {
      $set: {
        content: $("#input-content").html()
      }
    });

    words = $("#input-content > p").map(function() {
      $.text(this);
    }).get().join(" ");

    wordsNumber = words.trim().split(" ").length;

    $(".post-words-number").html(wordsNumber);
  }
});

post_list.js:

Template.postList.events({
  "click .open-post": function() {

    var words, wordsNumber;

    if (this.content) {
      $("#input-content").html(this.content);
    } else {
      $("#input-content").html("");
    }

    words = $("#input-content > p").map(function() {
      return $.text(this);
    }).get().join(" ");

    wordsNumber = words.trim().split(" ").length;

    return $(".post-words-number").html(wordsNumber);
  }
});

As you can see this:

    words = $("#input-content > p").map(function() {
      return $.text(this);
    }).get().join(" ");

    wordsNumber = words.trim().split(" ").length;

    return $(".post-words-number").html(wordsNumber);

is repeated twice. How to I create a helper for that piece of code so I can reuse it in those two templates? Where should I place it?

Upvotes: 0

Views: 39

Answers (1)

Hubert OG
Hubert OG

Reputation: 19544

Wherever you want to! As long as it's on the client side, of course. Files do see each other, so a piece of code written in one file can be accessed from any other.

So, for example:

/client/app.js

App = {};

App.doSomething = function(template) {
  ...
};

/client/views/post_list.js

Template.post_list.events({
  'click .clickable': function(e, t) {
    App.doSomething(t);
    ...
  },
});

Upvotes: 1

Related Questions