Ember Data对子目录模型的期望值是多少?

时间:2015-08-04 18:29:17

标签: ember.js ember-data ember-cli

我最近开始学习Ember并使用Ember-CLI,因此我对Ember Data的教育程度不高,以及它对我应用程序子目录中的关系所期望的数组名称。

// models/server.js
import DS from 'ember-data';

export default DS.Model.extend({
  serverHistory: DS.hasMany("history/server", { async: true })
});

// models/history/server.js
import DS from 'ember-data';

export default DS.Model.extend({
  server: DS.belongsTo("server", { async: true })
});

我已经尝试从我的API中返回这些名称

server_historys_ids
server_histories_ids
history_server_ids
history_servers_ids

但我在应用程序中看不到服务器历史记录的XHR请求。服务器本身很好。

更新

我更改了我的关系名称,并且API返回了历史记录ID,但即使我在模板中尝试each,我仍然没有收到历史记录json请求。可以在模板中访问游戏关系数据,并成功完成请求。

// models/server.js
import DS from 'ember-data';

export default DS.Model.extend({
  // attr's here.. not relevant

  // Relationships
  game: DS.belongsTo("game", { async: true }), // works
  serverHistories: DS.hasMany("history/server", { async: true }) // doesn't make a request like game does.
});

我还有一个adapter/history/server.js,但它只说明要使用的命名空间 - " api"。

更新2

我认为问题可能在于我将数据调用到模型中。

// routes/server/view/index.js
import Ember from 'ember';

export default Ember.Route.extend({
  model: function() {
    var parentModel = this.modelFor("server.view");

    return this.store.query("server", { server_address: parentModel.server_address });
    // return this.store.find("server", 1);
  }
});

为什么我使用带有id的find更新模板数据,当我使用带参数的查询时,它不会?

更新3

所以我解决了findquery问题,这是我开始工作的方式:https://stackoverflow.com/a/31831667/1814027

关系问题仍然存在。我在Ember工具栏中看不到serverHistory数据,也没有向API发出请求。

2 个答案:

答案 0 :(得分:1)

我相信serverHistoryhasMany的反常规名称,serverHistories应该是。{/ p>

export default DS.Model.extend({
  serverHistories: DS.hasMany("history/server", { async: true })
});

然后,如果ActiveModelAdapter预期server有效载荷为:

{"server": {"id": 1, "server_history_ids": [1,2,3]}}

它不依赖于serverHistory是命名空间模型的事实,它仅取决于关系名称。

例如对于模型:

// models/server.js
import DS from 'ember-data';

export default DS.Model.extend({
  bars: DS.hasMany("history/server", { async: true })
});

预期有效载荷是:

 {"server": {"id": 1, "bar_ids": [1,2,3]}}

<强>更新 使用ember-cli示例:https://github.com/artych/so_ember_data_subdir

答案 1 :(得分:0)

Artych的回答帮助我走上正确的道路,但Ember不想识别server_history_ids所以我只是将hasMany关系重命名为histories并从我的histories: []返回API。现在它有效..不知道为什么但它有效。