我在 Ember.js 中关于从 restful 服务器检索数据的问题(由 Sails.js 使用 MongoDB 提供服务)
我的路由器设置如下:
App.Router.map(function() {
this.route("dashboard");
this.resource('exams', {path: "/exams"}, function() {
this.resource('exam', {path: ":exam_id"}, function(){
this.resource('questions', function() {
this.route("new");
})
})
this.route("view", {path: "/:exam_id" }); // for viewing exam details
});
});
基本上我得到了一个可用考试的列表,并且可以编辑每个考试的一些细节,点击它来查看相关的问题列表。
我对使用 restful 适配器访问的考试资源没有任何问题,如下所示:
http://localhost:1337/api/v1/exams
产生:
{
exams: [
{
user_id: "52444c03268a31ea0b000001",
title: "Introduction test",
private: false,
active: false,
showResults: false,
random: false,
_id: "52471342445565e74600000a"
},
...
]
}
问题资源没有嵌入,而是存储在 MongoDB 中的一个单独集合中,并且可以单独访问:
http://localhost:1337/api/v1/questions
结果:
{
questions: [
{
_id: "52483f404617e6c728c4ed93",
title: "What's the capital of Moscow?",
exam_id: "52471342445565e74600000a"
},
{
_id: "52483f6e4617e6c728c4ed94",
title: "What's the capital of Switzerland?",
exam_id: "52471342445565e74600120a"
}
]
}
但是,问题应始终与考试相关。据我了解,您还不能在 Ember.js 中嵌套休息路线。我理想的休息路线是:
http://localhost:1337/api/v1/exams/52471342445565e74600000a/questions
获取特定考试的所有问题,但我不确定这是否可以完成。至少我从来没有经理让它工作。
因此,为了简单起见,我决定使用exam_id 轻松查询问题,以仅获取与特定考试相关的问题列表:
http://localhost:1337/api/v1/questions/52471342445565e74600000a //<-- exam_id
它返回我需要的结果......只有 Ember.js 不允许这样做,因为它认为我得到了一个带有特定 ID 的问题。我还尝试考虑使用 URL 参数(../?exam_id=52471342445565e74600000a)推送exam_id 来质疑restful 路由,但似乎queryParams 还不是Ember.js 的一部分。正如我在 Github 上看到的,至少在 v 1.2 之前没有。
所以我的问题是:我如何通过证明外键来关联和查询这两个模型?我真的不想把所有东西都嵌入到一个东西中。或者也许有更好的方法来管理模型之间的关系?
不过需要注意的是:我需要能够正确查询服务器以仅检索所需的记录,而不是对整个预取数据进行排序。这是因为不同的考试属于不同的用户,并且不同的考试的问题不允许其他人看到(查询)。
我对 Ember.js 有点陌生,所以任何建议(或更好但现实世界的例子)都会受到赞赏。