2015-07-05 79 views
1

我想要問一個RESTful服務器的products給定的category。服務器有兩個嵌套的路線。所以路徑/categories/1/products將僅導出category的產品ID爲1使用嵌套路由從服務器獲取數據

在我目前的應用程序,我具有獲取第一category和所有products的路線。這是浪費資源。我怎樣才能改變它,Ember Data只使用服務器的嵌套路徑獲取categoryproducts

route.js

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model: function() { 
    return { 
     category: this.store.find('category', 1), 
     products: this.store.find('product') 
    }; 
    } 
}); 

應用程序/類別/ model.js

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    name: DS.attr('string'), 
    products: DS.hasMany('product', { async: true }) 
}); 

應用/產品/ model.js

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    name: DS.attr('string') 
}); 

應用程序/應用/ adapter.js

import DS from 'ember-data'; 

export default DS.RESTAdapter.extend({ 
    host: 'http://www.example.com', 
    namespace: 'api/v1', 
}); 

回答

0

的方式,我通常做,這是通過查詢字符串。

this.store.query('products', {category : 1}); 
//for older ember-data version use syntax below 
//this.store.fetch('products', {category : 1}); 

這將產生

http://www.example.com/api/v1/products?category=1 

您的服務器的方法可以選擇適當的產品


其實回顧您再次提問,你可以做到以下幾點,以避免任何服務器更改。

export default Ember.Route.extend({ 
    model: function() { 
    return { 
     let promise = this.store.find('category', 1); 
     category: promise , //mmmm ... this line might not work because I have chained a .then() onto it below, if not try this.store.find('category', 1). Get back to me with your findings. 
     products: promise.then(function(category) { 
      return category.get('products').then(function(products) { 
       return products; 
      }); 
     }); 
    }; 
    } 
}); 
+0

這是「正確的」解決方案,但是OP暗示他想找到一種方法來處理現有的端點定義。 –