Ember - destroyRecord不是模型对象

时间:2017-02-11 19:00:39

标签: javascript ember.js

我有一个动作将模型对象传递给路径以删除它。但是当我在该对象上调用delete时,我认为model.destroyRecord不是函数。

  model() {
    return this.store.findRecord('user', 980190980).then((user) => {
      return user.getPlaylists();
    }.bind(this));
  },

  <i class="fa-icon fa fa-trash" aria-hidden="true" {{action "deletePlaylist" playlist}} style="margin-top:10px"></i>

  deletePlaylist(playlist) {
    this.get('playlists').removeObject(playlist);
    playlist.destroyRecord();
  }

如果我这样做:

this.store.findRecord('playlist', playlist.id).then(playlist => playlist.destroyRecord());

我收到以下错误:

Attempted to handle event 'pushedData' while in state root.deleted.inFlight

1 个答案:

答案 0 :(得分:0)

我会在您的电话debugger;之前添加destroyRecord()语句,并检查对象类型是否为Ember Data模型。我怀疑.getPlaylists()不是DS.Model类型,而是普通的javascript对象(PO​​JO)。

您的错误root.deleted.inFlight表示保存记录时出错,如果无法先保存,则无法将其删除。 Ember试图让你知道它是一个肮脏的模型,这意味着它有变化而且还没有被保存。 http://emberjs.com/api/data/classes/DS.RootState.html

deleteRecord()将在不调用服务器的情况下将其从商店中删除,destroyRecord()将执行与deleteRecord()相同的操作,并调用服务器通知此记录应从任何持久存储中删除。

您的代码也存在一些问题。 .bind()无效。 findRecord承诺没有正确的错误处理: http://emberjs.com/api/classes/RSVP.Promise.html

promise.then(function(value) {
  // on fulfillment
}, function(reason) {
  // on rejection
});