使用嵌套路由从服务器获取数据

时间:2015-07-05 11:00:39

标签: ember.js ember-data

我想向RESTful服务器询问给定products的{​​{1}}。服务器具有两者的嵌套路由。因此,路径category将仅导出ID为1的/categories/1/products的产品。

在我当前的应用程序中,我有一个路由,它获取第一个category和所有category。这是浪费资源。如何更改Ember Data仅使用服务器的嵌套路径获取products的{​​{1}}?

route.js

products

应用/类别/ model.js

category

应用/产品/ model.js

import Ember from 'ember';

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

应用/应用/ adapter.js

import DS from 'ember-data';

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

1 个答案:

答案 0 :(得分: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;
          });
      });
    };
  }
});