2014-02-18 118 views
1

我为我的Ember应用程序设置了以下脚手架。实施模型过滤器

window.App = Ember.Application.create({}); 

App.Router.map(function() { 
    this.resource('coaches', function() { 
     this.resource('coach', {path: "/:person_id"}); 
    }); 
}); 

App.ApplicationAdapter = DS.FixtureAdapter.extend({}); 

App.Person = DS.Model.extend({ 
    fname: DS.attr('string') 
    ,lname: DS.attr('string') 
    ,sport: DS.attr('string') 
    ,bio: DS.attr('string') 
    ,coach: DS.attr('boolean') 
    ,athlete: DS.attr('boolean') 
}); 

App.Person.FIXTURES = [ 
    { 
     id: 10 
     ,fname: 'Jonny' 
     ,lname: 'Batman' 
     ,sport: 'Couch Luge' 
     ,bio: 'Blah, blah, blah' 
     ,coach: true 
     ,athlete: true 
    } 
    ,{ 
     id: 11 
     ,fname: 'Jimmy' 
     ,lname: 'Falcon' 
     ,sport: 'Cycling' 
     ,bio: 'Yada, yada, yada' 
     ,coach: false 
     ,athlete: true 
    } 
]; 

我想设置一个路由来过滤人员模型,并只返回教练。为了确保我可以访问数据,我只是在人员模型上使用了一个findAll。

App.CoachesRoute = Ember.Route.extend({ 
    model: function() { 
     return this.store.findAll('person'); 
    } 
}); 

现在,虽然,我想实现的Ember.js Models - FAQ页面底部详述的滤波方法。

App.CoachesRoute = Ember.Route.extend({ 
    model: function() { 
     var store = this.store; 
     return store.filter('coaches', { coach: true }, function(coaches) { 
      return coaches.get('isCoach'); 
     }); 
    } 
}); 

教练的路线根本不工作,新的路线实施了,老的路线被注释掉了。我使用Ember Chrome扩展程序,当使用过滤器路由时,控制台响应Error while loading route: Error: No model was found for 'coaches'。显然这条路线不能正常工作,特别是模型。不开玩笑吧?我在过滤器模型路线中缺少什么?

非常感谢您的帮助。

回答

0

错误消息是现货 - 没有CoachModel。我认为你需要这样做:

App.CoachesRoute = Ember.Route.extend({ 
    model: function() { 
     var store = this.store; 
     return store.filter('person', { coach: true }, function(coaches) { 
      return coaches.get('isCoach'); 
     }); 
    } 
}); 
+0

史蒂夫,首先。谢谢你的时间来看看这个。很明显,我一直在看代码太久。感谢您了解引用“人”模型的需求。但现在,我正在抛出另一个错误。 加载路由时出错:错误:断言失败:未实现:您必须重写DS.FixtureAdapter :: queryFixtures方法以支持查询fixture存储。是否有更好的方法用于过滤?这似乎过于困难。 – knu2xs

+0

这是正确的。 'FixtureAdapter'不支持查询。我想你会在某个时候用真正的服务器替换你的灯具?否则,您可以使用自己的适配器扩展'FixtureAdapter'并实现'findQuery()'。如果我的答案解决了你的第一个问题,那么谢谢你“接受”它是一个正确的答案。 –

+0

因此,在做了一些更多的研究后,如果我想在客户端进行过滤,我需要在控制器中进行过滤,这是正确的吗? – knu2xs