1

我似乎无法锻炼如何在 Ember 中正确加载关系。用户模型仅在某些时候返回。如果我刷新页面,似乎有 50/50 的机会该值将为空,或者它会正确解析。

我知道在路由中我返回一个承诺,它是服务器对象(用户关系的 belongsTo 结束),但是我如何告诉路由在加载页面之前等待用户模型加载,或者我该怎么做告诉 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>

我在这里读过一个类似的问题How to load belongsTo/hasMany relationship in route with EmberJS

但是由于我只返回一个对象而不是一个数组,所以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 回答