2

I've had in my Meteor project handlebar helper:

Handlebars.registerHelper('isEq', function(v1, v2, options){
    if(v1 === v2){
        return options.fn(this);
    }else{
        return options.inverse(this);
    }
});

But after update to 0.8 and switch from handlebars to spacebars it is not working anymore - I've found in other stackoverflow topic that now I should change Handlebars.registerHelper to UI.registerHelper but it is still not working - anyone know how to implement this properly for spacebars?

Keith Dawson
  • 1,475
  • 16
  • 27
lukaszkups
  • 5,790
  • 9
  • 47
  • 85
  • what happens, does it run this helper? – Keith Nicholas Apr 26 '14 at 11:09
  • I'm getting `Deps` error in the console - something like this: `Exception from Deps recompute function: Spacebars.call(...)` and many, many lines of weird errors that says nothing to me. – lukaszkups Apr 26 '14 at 11:15
  • possible duplicate of [Check for equality in Spacebars?](http://stackoverflow.com/questions/24650658/check-for-equality-in-spacebars) – KyleMit Mar 26 '15 at 01:37

3 Answers3

6

I use a UI.registerHelper to add an eq function that can be used in conjunction with {{#if}} in Spacebars.

In the JavaScript code, I register an eq function of two variables that I can call from Spacebars (the system that has replaced Handlebars in Meteor v0.8)

UI.registerHelper('eq', function(v1, v2, options) {
  if(v1 == v2){
    return true
  } else {
    return false
  }
});

In the HTML, I write:

{{#if eq 1 2}}
They are equal.
{{else}}
They're not equal
{{/if}}
hmslydia
  • 195
  • 2
  • 6
3

You want to use it like the following?

{{#isEq 7 8}}
    They're equal!
{{else}}
    They're not equal :(
{{/isEq}}

From 0.8, block helpers are defined as templates. See https://github.com/meteor/meteor/tree/devel/packages/spacebars#custom-block-helpers

And I think you need to call it with keyword arguments ({{#isEq v1=7 v2=8}}). Although, you should be able to define isEq as an helper, and then use the #if block helper like {{#if isEq 7 8}}.

Peppe L-G
  • 7,351
  • 2
  • 25
  • 50
  • I've changed my function to return `true` or `false` value and use it like this: `{{#if isEq 2 3}}` and it worked! Thank You. – lukaszkups Apr 26 '14 at 13:20
2

This is how I implemented in Meteor 1.3+

// JavaScript
Template.registerHelper('odd', function(conditional, options) {
  return conditional % 2;
});

<!-- HTMLS -->
{{#each myCollection}}
{{#if (odd @index)}}
  even
{{else}}
  odd
{{/if}}
{{/each}}
Alan Dong
  • 3,981
  • 38
  • 35