1

Ember でリレーションシップを適切に読み込む方法を試していないようです。ユーザー モデルは、一部の時間だけを返します。ページを更新すると、50/50 の確率で値が null になるか、正しく解決されるようです。

サーバーオブジェクト(ユーザー関係のbelongsToエンド)であるpromiseを返すルートで理解していますが、ページをロードする前にユーザーモデルがロードされるのを待つようにルートに指示するにはどうすればよいですか、またはどのようにすればよいですか最終的にユーザーをロードしたときに、ページのデータを更新するよう ember に指示しますか?

afterModel フックで RSVP をいじってみましたが、うまくいきませんでした。これには明らかな解決策が必要ですか?

ルート

model(param) {
  return this.store.findRecord('server', param.server_id);
},

サーバーモデル

export default Model.extend(Validations, {
  user: belongsTo('user'),
});

ユーザーモデル

export default Model.extend({   
  displayName: attr('string'),
  servers: hasMany('server'),
});

成分

export default Ember.Component.extend({});

コンポーネント テンプレート

<div class="user-panel">
    <ul class="user-details">
        <li>owner:{{model.user.displayName}}</li>
    </ul>
</div>

私はここで同様の質問を読みまし

しかし、配列ではなく単一のオブジェクトのみを返すためArray Methods must be provided an Array、ソリューションを試すとスローされます

サーバーの応答

{
  "data": {
    "type": "server",
    "id": "578aba694b08ce2310f36798",
    "attributes": {
      //removed
    },
    "relationships": {
      "jobs": {
        "data": [
          {
            "type": "jobs",
            "id": "578aba694b08ce2310f3679a"
          }
        ]
      },
      "user": {
        "data": {
          "type": "user",
          "id": "57760677d04e0f11f4d3f7e5"
        }
      }
    }
  }
}
4

1 に答える 1

0

これはすぐに使用できるはずです。待機部分ではなく、自動更新です。

このひねりをチェックしてください。

ただし、モデルを待ちたい場合は、afterModelフックでこれを強制できます。

afterModel(model) {
  return get(model, 'user');
}
于 2016-07-16T21:43:15.527 に答える