Skip to content

Instantly share code, notes, and snippets.

@zoghal
Forked from wagenet/1-helper.js
Created June 4, 2012 16:40
Show Gist options
  • Save zoghal/2869466 to your computer and use it in GitHub Desktop.
Save zoghal/2869466 to your computer and use it in GitHub Desktop.
Ember Handlebars Transform Helper
Ember.HandlebarsTransformView = Ember.View.extend(Ember.Metamorph, {
rawValue: null,
transformFunc: null,
value: function(){
var rawValue = this.get('rawValue'),
transformFunc = this.get('transformFunc');
return transformFunc(rawValue);
}.property('rawValue', 'transformFunc').cacheable(),
render: function(buffer) {
var value = this.get('value');
if (value) { buffer.push(value); }
},
needsRerender: function() {
this.rerender();
}.observes('value')
});
Ember.HandlebarsTransformView.helper = function(context, property, transformFunc, options) {
options.hash = {
rawValueBinding: property,
transformFunc: transformFunc
};
return Ember.Handlebars.ViewHelper.helper(context, Ember.HandlebarsTransformView, options);
};
Ember.Handlebars.registerHelper('format', function(property, options) {
var transformFunc = function(value) {
return (value && value.format) ? value.format() : value;
};
return Ember.HandlebarsTransformView.helper(this, property, transformFunc, options);
});
// This one is untested but should work
Ember.Handlebars.registerHelper('datetime', function(property, options) {
var format = options.hash.format,
transformFunc = function(value) {
return (value && value.format) ? value.format(format) : value;
};
return Ember.HandlebarsTransformView.helper(this, property, transformFunc, options);
});
/*
* Example:
*
* var now = moment().add('days', 9);
* {{datetime now format="dddd, MMMM Do YYYY"}}
* Friday, January 13th 2012
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment