2

安らかなサーバー (MongoDB を使用して Sails.js によって提供される) からのデータの取得に関して、Ember.js のモデルに関連する問題が発生しています。

私のルーター設定は次のとおりです。

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
    });
});

基本的に、利用可能な試験のリストを取得しており、それぞれの詳細を編集したり、クリックして関連する問題のリストを表示したりできます。

次のような安らかなアダプターでアクセスされる試験リソースに問題はありません。

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

これは必要な結果を返します...これだけは、特定の ID を持つ単一の質問を取得していると考えているため、Ember.js では許可されていません。また、URL パラメータ (../?exam_id=52471342445565e74600000a) を使用して安静なルートに質問するために Exam_id をプッシュしようとしましたが、queryParams はまだ Ember.js の一部ではないようです。Githubで見たように、少なくともv 1.2より前ではありません。

私の質問は次のとおりです。外部キーを証明することにより、これら 2 つのモデルを関連付けてクエリするにはどうすればよいですか? 私は本当にすべてを1つのものに埋め込みたくありません。または、モデル間の関係を管理するためのより良い方法があるでしょうか?

ただし、注意点が 1 つあります。必要なレコードのみを取得し、プリフェッチされたデータ全体を並べ替えるのではなく、サーバーに正しくクエリを実行できる必要があります。これは、異なる試験は異なるユーザーに属し、異なる試験の問題は他のユーザーに表示 (クエリ) できないためです。

私は Ember.js を初めて使用するので、提案 (または実際の例) をいただければ幸いです。

4

1 に答える 1

1

Ember Data を使用する場合、これのほとんどは非常に簡単です。

クエリ文字列部分は単純です。

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

「/api/questions?exam_id=123213」のような GET を生成します。

関係の部分もすばらしく、超簡単です。

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

App.Comment = DS.Model.extend({
  post: DS.belongsTo("blogPost")
});
于 2013-10-19T18:41:23.433 に答える