试图在 <testapp@model:testroute::ember1700:1> 状态 root.loaded.updated.invalid 上处理事件“pushedData”

Attempted to handle event `pushedData` on <testapp@model:testroute::ember1700:1> while in state root.loaded.updated.invalid

我有一个名为“testroute”的 route (localhost:8080/testroute)。

它有一个记录。我试图编辑它 (localhost:8080/testroute/edit/1)。我给出了新的值并提交了。这些值无法通过服务器端验证,并且 错误消息 被抛出 状态代码 422

然后我决定不再编辑它了。从这里开始,我走了另一条名为“nextroute”的路线 (localhost:8080/nextroute)。

现在,我再次尝试去 'testroute' (localhost:8080/testroute)。它没有成功,在控制台中我得到错误 "Attempted to handle event pushedData on while in state root.loaded.updated.invalid."

我以前用编辑后的值进行 ajax 调用的是

this.get('model').save().then(function(response){
      console.log('response',response);
      //code
},function(error){
      console.log('error',error);
      //code
});

当我刷新页面时,我可以转到 'testroute' (localhost:8080/testroute)。但是出现这个错误后我打不开

记录在 ember 日期处于修改状态(我在 ember 检查器中看到它)。当我刷新它时,它只会进入干净状态。

据我所知,您的服务器无法处理您的 post/patch 请求并返回错误。因此,您的模型处于无效状态。你应该做的是,一旦返回错误,rollback 你的模型:

var model = this.get('model')
model.save().then(function(response){
      console.log('response',response);
      //code
},function(error){
      console.log('error',error);
      model.rollbackAttributes();
});

编辑:

如果您需要在离开页面之前保持模型的状态,您应该使用路由的 willTransition 事件,例如:

Ember.Route.extend({
  actions: {
    willTransition: function(transition) {
      if (this.controller.get('model.errors')) {
          Ember.Logger.debug('model will be reverted');
          this.controller.get('model').rollbackAttributes()
      }
    }
  }
});

有关详细信息,请参阅 here