问题
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?
回答1:
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}}
.
回答2:
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}}
回答3:
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}}
来源:https://stackoverflow.com/questions/23308940/how-do-i-convert-handlebars-iseq-helper-to-spacebars-in-meteor