With the recent release of Ember.js version 1.13 comes support for a new API for declaring helpers.
One approach creates a helper class via Ember.Helper’s .extend
,
while the other declares the helper with a shorthand API
via the Ember.Helper.helper function.
At the core of both approaches is the compute
function.
This function accepts an array of parameters, as well as a hash of options, populated when invoked in a Handlebars template:
{{address "1600 Pennsylvania Ave" "Washington, DC" "20500" separator="<br>"}}
The corresponding JavaScript would look like this:
import Ember from 'ember';
export default Ember.Helper.helper(
function compute(params, hash) {
const street = params[0];
const cityAndState = params[1];
const zipCode = params[2];
const separator = hash.separator;
// ... do the work
}
);
Using ES2015 destructuring, the variable declarations can be moved to
the function
‘s parameter list:
import Ember from 'ember';
export default Ember.Helper.helper(
function compute([street, cityAndState, zipCode], { separator }) {
// ... do the work
});
While this works great for Ember.Helper
, there is nothing stopping you from
using this anywhere your functions accept arrays of arguments or hashes of
options:
function calculateArea({ width, height }) {
return width * height;
}
// call it with a hash
const rectangle = { width: 5, height: 4 };
calculateArea(rectangle); // => 20