2

我有一组非常相似的计算属性:

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')

有什么办法可以将其更改为一个属性,可能是一组属性?

4

1 回答 1

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);
于 2012-07-29T03:29:00.767 回答