0

これを emberjs フォーラムに投稿しましたが、SO の方が適切なようです。

やあ!classyear と classyear という 2 つのルートがあります。それらは次のようにネストされています。

this.resource('classyears', function(){
    this.resource('classyear', { path: '/classyear/:classyear_id'});
});

Posterkiosk.ClassyearsRoute = Ember.Route.extend({
  model: function() {
    return Posterkiosk.Classyear.find();
  }
});

Posterkiosk.ClassyearRoute = Ember.Route.extend({
  model: function(model) {
    return Posterkiosk.Classyear.find(model.classyear_id);
  }
});

私のテンプレートは次のとおりです。

学年:

<div class="yearList">
{{#each item in model}}
    {{#linkTo 'classyear' item}}{{item.id}}{{/linkTo}}
{{/each}}
</div>
{{outlet}}

学年:

<div class="transformContainer">
    {{trigger sizeComposites}}
    {{name}}
    {{#each students}}
      {{partial student}}
    {{/each}}
</div>

(「トリガー」ヘルパーは別のSO投稿からのものです。ただし、問題は追加する前に発生していました)

Ember モデルの RESTAdapter を使用しています。/classyear/:classyear_id をロードすると、classyear がデータを 2 回レンダリングしているように見えます。1 回は正しくロードされたデータで、もう 1 回はデータがロードされていません。順番はランダムのようです。データなしオプションが最後に発生すると、正しくロードされたデータが消去され、空白のページが残ります。逆に、ページのコンテンツは問題なく表示されます。

何かご意見は?

/編集 2: 詳細情報:

0 レコードの応答は、classyears の読み込みからのもののようです。したがって、ゼロ レコードの返信は、実際には、私の hasMany フィールド「students」のゼロ レコードである可能性があります。

/classyears (学年が指定されていない) をロードすると、学年のオプションを取得するために 1 回だけロードされます。次に学年をクリックすると、ページを更新しない限りclassyearsがリロードされず、その時点で両方が読み込まれ、classyearsの読み込み(findall)が2番目に終了すると、ページにデータが表示されません(他のclassyears テンプレートよりも上部に正しく入力されています)。

それで...多分私のclassyearsモデルはhasManyフィールドを正しく処理していませんか?

近づいた気がしますが、まだ何が起こっているのかわかりません。

4

1 に答える 1

1

まず、次のStudentように a のモデルを指定する必要があります。

Posterkiosk.Student = Ember.Model.extend({
  id: Ember.attr(),
  name: Ember.attr(),
  imageUrl: Ember.attr(),
  gradyear: Ember.attr()
});

Posterkiosk.Student.adapter = fixtureAdapter;

さて、あなたの例では、 has many のキーを に設定していますがstudents、これstudentsは ID ではなくオブジェクトの配列であるため、 というプロパティを作成し、student_idsID の配列を渡します。これがキーになります。

Posterkiosk.Classyear = Ember.Model.extend({
  students: Ember.hasMany('Posterkiosk.Student', {key: 'student_ids'})
});

を設定embedded: trueすると、Classyears サーバーの応答は次のようになります。

{
  classyears: [
    {..},
    {..}
  ],
  students: [
    {..},
    {..}
  ]
}

それ以外の場合、EM はモデルのエンドポイントに別の呼び出しをStudent行い、プロパティに基づいてそのデータを取得しstudent_idsます。

動作中のjsbinを参照してください。

ヒント: RC.7+ では、部分記号からアンダースコアが削除されました。また、部分部分の名前は引用符で囲む必要があります。

于 2013-08-30T19:40:11.677 に答える