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

これを 1 つのプロパティ、おそらくセット プロパティに変更する方法はありますか?

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のreopenを使用して、フィルタリング機能を動的に追加することもできます。

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 に答える