【问题标题】:Ember isn't always loading belongsToEmber 并不总是加载belongsTo
【发布时间】:2016-11-19 07:01:34
【问题描述】:

我似乎无法锻炼如何在 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 relationships 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"
        }
      }
    }
  }
}

【问题讨论】:

  • 对于密切相关的模型,时间可能很挑剔。如果您可以控制 API,我建议将用户与服务器一起加载。

标签: ember.js ember-data rsvp-promise


【解决方案1】:

这应该开箱即用!不是等待部分,而是自动更新。

结帐this twiddle。

但如果您想等待模型,您可以在 afterModel 挂钩中强制执行此操作:

afterModel(model) {
  return get(model, 'user');
}

【讨论】:

  • 是的,我也是这么想的,它最终出现在嵌套组件中的事实与它有什么关系吗?
  • 并非如此。仅当您不通过模型时。更有可能是您的 API、序列化程序或适配器有问题。使用 ember-inspector 检查您的状态。通常的问题是 ember-data 认为它已经加载了记录,或者关系不清楚。
  • 不幸的是 afterModel 钩子不起作用。使用检查我可以看到用户模型isFulfilled : truecontent 为空。服务器正在返回用户模型,而 ember 正在发送对数据的请求,看起来时间已经结束,并且当数据从服务器返回时,ember 没有更新其记录。每次使用邮递员查询端点时,服务器都会正确响应。
  • 如果isFulfilled:truecontent:null 那么你的服务器响应,你的序列化器或适配器做错了!与余烬检查员一起检查。还要检查 both 服务器响应。 userserver
  • 我正在使用“开箱即用”序列化程序(我还没有写过)和默认的JSONAPIAdapter,只配置了主机。来自服务器的用户响应也是正确的。用户模型有两个hasMany 关系,在这种情况下我需要声明相反的关系吗?
猜你喜欢
  • 1970-01-01
  • 2013-06-09
  • 2014-09-22
  • 1970-01-01
  • 1970-01-01
  • 2018-08-27
  • 2012-08-10
  • 2013-06-25
  • 2018-09-27
相关资源
最近更新 更多