【问题标题】:Why does Ember complain when pushing an object onto an Ember array?为什么 Ember 在将对象推送到 Ember 数组时会抱怨?
【发布时间】:2013-08-09 03:58:31
【问题描述】:

我正在使用 Ember RC6.1Ember Model。当我将模型类的adapter 属性设置为Ember 模型的RESTAdpater 类的实例并执行findAll 时,会为添加到生成的Ember 数组的每个对象抛出一个断言。堆栈跟踪显示对象被压入数组,插入,然后替换。我不确定为什么会发生后者(替换)。这可能是隐式排序的结果。

对于每次推送,都会抛出一个断言,声明应在修改 RecordArray(继承自 ArrayProxy)实例的 content 属性之前对其进行设置。

Assertion failed: The content property of Ember.RecordArray should be set before modifying it

生成的数组表现正常,但我想知道这是 Ember 模型还是 Ember 本身的错误。我假设我的代码不对这个错误负责,因为除了根据 Ember 模型的文档从 API 获取数据之外,我没有做任何不寻常的事情。

我在下面添加了堆栈跟踪。

(anonymous function) application.js:6108
Ember.assert application.js:5799
Ember.ArrayProxy.Ember.Object.extend._replace application.js:17977
Ember.ArrayProxy.Ember.Object.extend._insertAt application.js:17992
Ember.ArrayProxy.Ember.Object.extend.pushObject application.js:18036
superWrapper application.js:6826
Ember.Model.reopenClass.addToRecordArrays application.js:5251
(anonymous function) application.js:5242
sendEvent application.js:7843
Ember.Evented.Ember.Mixin.create.trigger application.js:16867
Ember.Model.Ember.Object.extend.load application.js:4792
Ember.Model.reopenClass.findFromCacheOrLoad application.js:5280
(anonymous function) application.js:4453
Ember.RecordArray.Ember.ArrayProxy.extend.materializeData application.js:4452
Ember.RecordArray.Ember.ArrayProxy.extend.load application.js:4435
Ember.RESTAdapter.Ember.Adapter.extend.didFindAll application.js:5585
(anonymous function) application.js:5576
invokeCallback application.js:12843
(anonymous function) application.js:12886
EventTarget.trigger application.js:12674
(anonymous function) application.js:12941
DeferredActionQueues.flush application.js:10648
Backburner.end application.js:10338
Backburner.run application.js:10377
Ember.run application.js:10859
settings.success application.js:5697
fire application.js:38117
self.fireWith application.js:38228
done application.js:45154
callback

更新:对 pushObject 的调用由 Ember 模型执行。我添加了addToRecordArrays的实现,将记录添加到RecordArray的实例中的方法。

addToRecordArrays: function(record) {
  if (this._findAllRecordArray) {
    this._findAllRecordArray.pushObject(record);
  }
  if (this.recordArrays) {
    this.recordArrays.forEach(function(recordArray) {
      recordArray.pushObject(record);
    });
  }
}

【问题讨论】:

  • 你能分享你试图推送到RecordArray的代码吗?
  • 当然。但是,重要的是要知道这是由 Ember Model 完成的。
  • 是否应该在 Ember-Model Github 存储库中将其标记为问题?我也看到了...
  • 我在提交问题时有点谨慎,因为我找不到任何关于此问题的报告。但是,很高兴知道其他人可以重现此问题。

标签: ember.js ember-model


【解决方案1】:

我已恢复引入此问题的提交。

【讨论】:

  • 在查看了pull request 之后,断言和相应的堆栈跟踪是有意义的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
  • 2012-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多