Ember.js is a very expressive framework that allows for more than one way to implement a feature. Ember computed properties are frequently used, but this can sometimes lead to code that is repetitive.
One of my favorite ways for drying up ember code is to use the macros in the Ember.computed module. There are macros that allow for a lot of basic operations, equality, comparisons, and checking for empty lists, just to name a few. The macros are not mentioned in the ember docs, but can be found in ember-metal’s computed object.
Here is an example of a few Ember.computed macros in use:
var TestObject = Ember.Object.extend({
emptyList: [],
number: 25,
prop1: true,
prop2: false,
prop3: true,
prop1And3: Ember.computed.and("prop1", "prop3"), // true
prop1Or2: Ember.computed.or("prop1", "prop2"), // true
emptyListIsEmpty: Ember.computed.empty("emptyList"), // true
emptyListNotEmpty: Ember.computed.notEmpty("emptyList"), // false
numberIs25: Ember.computed.equal("number", 25), // true
numberBiggerThan50: Ember.computed.gt("number", 50), // false
propArray: Ember.computed.map("prop1", "prop2", "prop3") // [true,false,true]
});