2014-05-15 3 views
1

J'ai un ArrayController, et je voudrais regrouper le contenu de ce ArrayController basé sur la valeur d'une clé spécifique.Ember.js: Regrouper/partitionner un ArrayController

Par exemple, si les objets de mon ArrayController sont:

id status name 
----------------------------- 
1 1  some name 
2 1  some other name 
3 2  blah 
4 3  blah again 

Ensuite, je voudrais regrouper le contenu par status.

Pour ce faire, j'ai essayé d'utiliser les propriétés calculées dans mon ArrayController:

App.SomeArrayController = Ember.ArrayController.extend({ 
    itemController: 'some-item',  

    status1: Ember.computed.filterBy('content', 'status', 1), 
    status2: Ember.computed.filterBy('content', 'status', 2), 
    status3: Ember.computed.filterBy('content', 'status', 3) 
}); 

Dans le modèle, ceux-ci sont en cours d'affichage, mais ils sont pas être enveloppé par le itemController I spécifié dans la ArrayController:

// item controller used in the ArrayController 
App.SomeItemController = Ember.ObjectController.extend({ 
    anotherKey: function() { 
    return 'hey ' + this.get('name'); 
    }.property('name') 
}); 


<!-- template to display status=1 items --> 
{{#each status1}} 

    // displays the name (as a property from the model) 
    {{this.name}} 

    // nothing displays here 
    // (leading me to believe it is not being wrapped by the item controller) 
    {{this.anotherKey}} 
{{/each}} 

Qu'est-ce que je fais mal?

Répondre

1

itemController uniquement lorsque vous parcourez la collection de contrôleurs.

{{#each item in controller}} 
    {{item.coolItemControllerProperty}} 
{{/each}} 

Elle ne s'applique à aucune collection dans le contrôleur. Si vous essayez d'itérer le modèle/contenu sous-jacent, il ne sera pas encapsulé.

{{#each item in content}} 
    {{item.coolItemControllerProperty}} // undefined 
{{/each}} 

{{#each item in model}} 
    {{item.coolItemControllerProperty}} // undefined 
{{/each}} 

heureusement, vous pouvez spécifier un itemController dans votre modèle pour ces situations.

{{#each item in status1 itemController='some-item'}} 
    {{item.coolItemControllerProperty}} 
{{/each}}