繁体   English   中英

在API请求中指定父项

[英]Specify parent in API request

我对炭烬还很陌生,并且已经深陷其中,所以很有可能我错过了一些在这里应该显而易见的东西。

无论如何,我的rails应用程序已将路由定义为/api/1/publications/:publication_id/catalogs 一切正常。

但是,我一生无法让Ember使用此路由,我尝试执行的所有操作都会导致对/api/1/catalogs请求-或根本没有请求。

我的router.js文件具有:

Router.map(function() {
  this.route('publication', { path: '/publication/:publication_id' }, function() {
    this.route('catalogs', { path: '/publication/:publication_id/catalogs' });
  });
});

我的出版物模型有

catalogs: DS.hasMany('catalog'),

我的目录模型有

publication: DS.belongsTo('publication')

并且,除了其他一些因撤消而丢失的方法之外,我还尝试了以下方法来查询我的route .js文件中的数据

model() {
  this.modelFor('publication.name')
  var output = {
    model: this.modelFor("publication")
  };

  let publication = this.modelFor('publication');
  output.catalogs = publication.get('catalogs');

  return RSVP.hash(output);
},

...

output.catalogs = output.model.get('/api/ember/1/publications/' + output.model.id + '/catalogs');

...

var output = {
  model: this.modelFor("publication"),
  catalogs: model.catalogs,

...

this.get('store').findAll('catalog', {'publication_id': output.model.id, reload: true});

有人可以告诉我我做错了/不做吗?

如果我做对了,您正在尝试自定义用于查询publication has-many关系catalogs的URL。 Ember Data使用适配器配置API端点。 我猜您的应用程序使用DS.RESTAdapter 如果是这样,则应实现一个自定义urlForFindHasMany方法 假设适配器已正确配置为获取publication则它可能如下所示:

import DS from 'ember-data';

export default DS.JSONAPIAdapter.extend({
  urlForFindHasMany(id, modelName, snapshot) {
    let baseUrl = this.buildURL(modelName, id);
    return `${baseUrl}/catalogs`;
  }
});

应通过publication模型上的属性查询该关系:

async model() {
  let publication = await this.store.findRecord('publication', '1');
  return publication.catalogs;
},

catalogs属性是DS.PromiseManyArray ,这是一个特殊对象,它同时充当Ember.Array和Promise。

您的路由器看起来有点奇怪。 这是v3 +中通常的样子

this.route('products', function() {
    this.route('show', { path: ‘/:id’ }, function() {
      this.route('show-detail');
    });   

在这里,我们有3条路线:/产品(选择屏幕),/产品/ 1 /显示和产品/ 1 /显示/显示细节。

另外,如果您没有它, Ember检查器 chrome附加组件可以很好地帮助您确定哪些路由/控制器。 等Ember应用正在使用和识别

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM