Filtern Sie untergeordnete Datensätze (hasMany-Zuordnung) mit Ember.js

Gibt es eine Möglichkeit das zu filtern?hasMany Datensätze aus einem Modell Datensatz? Ich möchte die aktiven Projekte vom Kunden gruppiert bekommen.

Kundenmodell

Docket.Customer = DS.Model.extend({
  name:        DS.attr('string'),
  initial:     DS.attr('string'),
  description: DS.attr('string'),
  number:      DS.attr('string'),
  archived:    DS.attr('boolean'),
  projects:    DS.hasMany('project',{ async: true })
});

Projektmodell

Docket.Project = DS.Model.extend({
  name:        DS.attr('string'),
  description: DS.attr('string'),
  number:      DS.attr('string'),
  archived:    DS.attr('boolean'),
  customer:    DS.belongsTo('customer', { async: true })
});

Projektroute

Docket.OrganizationProjectsIndexRoute = Docket.AuthenticatedRoute.extend({
  setupController: function () {

    var customersWithActiveProjects = this.store.filter('customer', function(customer) {
      return customer.get('id') && GET_ONLY_ACTIVE_PROJECTS_FROM_CUSTOMER?
    });

    this.controllerFor('organization.projects').set('filteredProjects', customersWithActiveProjects);
  }
});
Aktualisieren

Ich habe so etwas versucht, aber es funktioniert nicht. Ich denke, dies ist ein Problem, das durch asynchrone Anforderungen verursacht wird. Aber zeigt es in die richtige Richtung?

Docket.OrganizationProjectsIndexRoute = Docket.AuthenticatedRoute.extend({
  setupController: function () {

    // get customers because we group projects by customers
    var customers = this.store.filter('customer', function(customer) {
      return customer.get('id')
    });

    var sortedProjects;

    // loop through each valid customer and filter the active projects
    $.when(

      customers.forEach(function(customer){
        customer.get('projects').then(function(projects) {

          var filteredProjects = projects.filter(function(project){
            return !project.get('archived')
          });

          customer.set('projects',filteredProjects);
        });

      })

    ).then(function() {

        sortedProjects = Ember.ArrayProxy.createWithMixins(Ember.SortableMixin, {
          sortProperties: ["name"],
          content: customers
        });

    });

    this.controllerFor('organization.projects').set('filteredProjects', sortedProjects);

  }
});

Antworten auf die Frage(1)

Ihre Antwort auf die Frage