Высыхание вычисляемых свойств ember.js

У меня есть коллекция вычисляемых свойств, которые очень похожи:

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

Есть ли способ изменить это на одно свойство, возможно, на заданное свойство?


person dagda1    schedule 28.07.2012    source источник


Ответы (1)


да. Используйте функцию, которая возвращает эту функцию фильтра.

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);
person Ryan    schedule 29.07.2012