2014-02-18 115 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