gpt4 book ai didi

javascript - Ember.js RESTful 模型关系

转载 作者:行者123 更新时间:2023-11-30 05:43:24 24 4
gpt4 key购买 nike

我在 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"
},
...
]
}

Questions 资源不是嵌入的,而是存储在 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 的问题。我还尝试研究插入 exam_id 来质疑带有 URL 参数的 Restful 路由 (../?exam_id=52471342445565e74600000a) 但似乎 queryParams 还不是 Ember.js 的一部分。正如我在 Github 上看到的那样,至少不是 v 1.2 之前。

所以我的问题是:如何通过证明外键关联和查询这两个模型?我真的不想把所有东西都嵌入到一个东西中。或者也许有更好的方法来管理模型之间的关系?

但有一个警告:我需要能够正确查询服务器以仅检索所需的记录,而不是对整个预取数据进行排序。这是因为不同的考试属于不同的用户,不同考试的题目不允许其他人看到(查询)。

我对 Ember.js 有点陌生,所以任何建议(或更好但真实世界的例子)都会受到赞赏。

最佳答案

如果您使用 Ember Data,其中大部分都非常简单。

查询字符串部分很简单:

this.get('store').find('question', {exam_id: 123213});

会产生类似这样的 GET '/api/questions?exam_id=123213'

关系部分很棒,也 super 简单:

App.BlogPost = DS.Model.extend({
comments: DS.hasMany("comment")
});

App.Comment = DS.Model.extend({
post: DS.belongsTo("blogPost")
});

关于javascript - Ember.js RESTful 模型关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19463829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com