我最近开始学习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"。
我认为问题可能在于我将数据调用到模型中。
// 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更新模板数据,当我使用带参数的查询时,它不会?
所以我解决了find
和query
问题,这是我开始工作的方式:https://stackoverflow.com/a/31831667/1814027
关系问题仍然存在。我在Ember工具栏中看不到serverHistory数据,也没有向API发出请求。
答案 0 :(得分:1)
我相信serverHistory
是hasMany
的反常规名称,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。现在它有效..不知道为什么但它有效。