2013-10-02 46 views
3

我想通过子属性过滤现有的ArrayController。怎么做?我的过滤器不工作或是空的,因为我没有看到任何项目出现(如果我不过滤,我看到他们)。如何正确过滤ArrayController

这里是我的代码的简化版本:

模式

App.Post = DS.Model.extend({ 
    user: DS.belongsTo('user') 
    title: DS.attr('string'), 
    ... 
}); 
App.User = DS.Model.extend({ 
    name: DS.attr('string'), 
    status: DS.belongsTo('status'), 
    ... 
}); 
App.Status = DS.Model.extend({ 
    title: DS.attr('string'), 
    techName: DS.attr('string') 
}); 

控制器

App.PostsController = Ember.ArrayController.extend({ 
    activeUsers: function() { 
     return this.filterBy('user.status.techName', 'active'); 
    }.property('@each','@each.user','@each.user.status','@each.user.status.techName') 
}); 
App.ActiveUsersController = Ember.ArrayController.extend({ 
    needs: ['posts'] 
}); 

模板 (我的活跃用户模板)

<ul> 
    {{#each controllers.posts.activeUsers}} 
     <li>{{name}}</li> 
    {{/each}} 
</ul> 

回答

3

Ember.computed.filterBy将满足您的要求。

App.PostsController = Ember.ArrayController.extend({ 
    activeUsers: Ember.computed.filterBy('content','user.status.techName','active'), 
}); 

这尚未记录,但你可以从注释的源代码学习here

样本JSBin

+0

THX的男人,正是我需要的! –

+0

很高兴帮助:) – Hyder