我有一组非常相似的计算属性:
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')
我有什么方法可以将其更改为一个属性,可能是一个设置的属性吗?
答案 0 :(得分:3)
是。使用返回此过滤器函数的函数。
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);