Ember.js渲染后修改断言失败

Ember.js Assetion failed due to modification after rendering

我正在开发一个非常简单的 ember 组件结构,但我一直遇到同样的错误:

Assertion Failed: You modified "pipeline.status" twice on <frontend@model:pipeline-instance::ember497:59636F5284D6CE0009000002> in a single render. It was rendered in "component:pipeline-manager" and modified in "component:pipeline-manager". This was unreliable and slow in Ember 1.x and is no longer supported. See https://github.com/emberjs/ember.js/issues/13948 for more details.

我已将所有功能剥离到这个非常简单的代码中,但我仍然遇到断言错误。

流水线-instance.js模型:

export default DS.Model.extend({
  status: DS.belongsTo('status')
});

管道-manager.js为空。

管道-manager.hbs模板:

<div class="pipelines--show">
  <div class="row status">
    Current status: {{await pipeline.status.title}}
  </div>
</div>

package.json:

"devDependencies": {
  ...
  "ember-cli": "2.11.1",
  "ember-cli-app-version": "^2.0.0",
  ...
 }

似乎我设法摆脱错误的唯一方法是使用 ember s --prod

ember-data@2.14.0 中的 known issue 导致了此问题。每当您在模板中引用相关模型的 属性 时(例如上面的示例:pipeline.status.title),您都会看到有关失败断言的消息。 运行 npm list ember-data 确认你是 运行 2.14.x

目前,我建议恢复到 ember-data@2.13.2 - 只需在 package.json 中指定 2.13.2,如下所示:"ember-data": "2.13.2"。当发布修复此问题的 ember-cli/ember-data 的新版本时,您可以通过 ember init.

作为正常升级过程的一部分更新 package.json

已经有一个 Pull Request 解决这个问题,希望它能尽快合并,以便我们升级。