Coffeescript 干燥ember.js计算属性
我有一个非常相似的计算属性集合:Coffeescript 干燥ember.js计算属性,coffeescript,ember.js,Coffeescript,Ember.js,我有一个非常相似的计算属性集合: WZ.ExercisesHomeController = Em.ArrayController.extend content: Ember.A() arms: ( -> @filterProperty('group.name', 'Arms') ).property('@each.isArms') abs: ( -> @filterProperty('group.name'
WZ.ExercisesHomeController = Em.ArrayController.extend
content: Ember.A()
arms: ( ->
@filterProperty('group.name', 'Arms')
).property('@each.isArms')
abs: ( ->
@filterProperty('group.name', 'Abs')
).property('@each.isAbs')
back: ( ->
@filterProperty('group.name', 'Back')
).property('@each.isBack')
chest: ( ->
@filterProperty('group.name', 'Chest')
).property('@each.isChest')
legs: ( ->
@filterProperty('group.name', 'Legs')
).property('@each.isLegs')
有没有办法把它改成一个属性,可能是一个集合属性?有。使用返回此筛选函数的函数
var filterFn = function(name) {
return function() {
return this.filterProperty('group.name', name);
}.property('@each.is' + name);
};
Ember.ArrayController.create({
arms: filterFn('Arms'),
legs: filterFn('Legs'),
...
});
您甚至可以使用Ember的重新打开动态添加过滤功能
App.ArrayController = Ember.ArrayController.extend();
var names = ['Arms', 'Legs', ...];
var toAdd = {};
names.forEach(function(name) {
toAdd[name] = filterFn(name);
});
App.ArrayController.reopen(toAdd);