Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 成功保存而不删除记录后转换到路由_Ember.js_Ember Data - Fatal编程技术网

Ember.js 成功保存而不删除记录后转换到路由

Ember.js 成功保存而不删除记录后转换到路由,ember.js,ember-data,Ember.js,Ember Data,带有夹具适配器的Ember-1.0.0和Ember Data 1.0 Beta 2 我试图实现的是,在调用save后,如果返回的承诺得到解决,我希望转换到路由 在中,您可以单击“新建”,键入内容,然后单击“创建”。转换发生,因此save的承诺得到了解决,但是我们创建的新模型由于deactivate钩子而被删除 另外,在数据窗口中打开chrome ember inspector可能会有所帮助 但我的实现显然是错误的。我应该如何保存一条记录,然后在转换到路由之前等待承诺得到解决,而不删除新创建的记录

带有夹具适配器的Ember-1.0.0和Ember Data 1.0 Beta 2

我试图实现的是,在调用
save
后,如果返回的承诺得到解决,我希望转换到路由

在中,您可以单击“新建”,键入内容,然后单击“创建”。转换发生,因此
save
的承诺得到了解决,但是我们创建的新模型由于
deactivate
钩子而被删除

另外,在数据窗口中打开chrome ember inspector可能会有所帮助

但我的实现显然是错误的。我应该如何保存一条记录,然后在转换到路由之前等待承诺得到解决,而不删除新创建的记录

以下是保存操作:

save: function() {
  var self = this;
  self.modelFor('thingsNew').save().then(function() {
    self.transitionTo('things');
  });
}
和挂钩:

deactivate: function() {
  var model = this.modelFor('thingsNew');
  if(!model.get('isSaving')) {
    model.deleteRecord();
  }
}
其他一切请参见

deactivate
的原因是,当用户单击另一个链接或在单击“创建”按钮之前按“上一步”按钮时,
thingsNew
中的模型会被正确删除。例如,假设用户单击
New
,然后单击
Home
。模型仍然存在。如果用户再次单击
New
,将创建一个新模型。现在我们有两种新型号。如果用户再次单击
Home
,然后单击
New
,现在我们有三种型号。如果输入了有效的输入,并且用户最终单击了
Create
,则一个新的已保存模型和两个新的未保存模型仍在浮动。我认为现在已经没有办法访问这些浮动模型了

最后,如果我只调用这两个方法,那么模型将调用
save
,然后在不删除模型的情况下进行转换,但无论承诺是得到解决还是被拒绝,它都会这样做

model.save();
model.transitionTo('things');

需要注意的是,RESTAdapter似乎也会出现这种情况。该记录已在服务器上成功创建,但在转换过程中,该模型仍会在Ember应用程序中被删除。

查看了您的代码。为什么要在停用中实现“deleterecord”

每次更改路线时都会调用deactivate,并且您已经在deactivate中执行了删除,因此删除记录是正常的

如果(!model.get('isSaving')表示如果您未处于isSaving状态(仅在很短的时间内发生),则删除该记录

我想您可以删除整个停用块。然后它就会起作用


Marc

我现在更明白了为什么要在“停用”处删除。我一直了解到最好不要使用deactivate(在xxx/edit/1和xxx/edit/2之间切换时不会触发)

您可以更好地使用willTransition。以下是我使用的代码:

App.AuthorsNewRoute = Ember.Route.extend({
  model: function() {
    return this.store.createRecord('author');
  },

  actions: {
    willTransition: function(transition) {
      var model = this.get('currentModel');
      if (model && model.get('isDirty')) {
        if (confirm("You have unsaved changes. Click OK to stay on the current page. Click cancel to discard these changes and move to the requested page.")) {
          //Stay on same page and continue editing
          transition.abort();
        } else {
          //Delete created record
          var author = this.get('currentModel');
          author.deleteRecord();
        }
      } 
    }
  }
});

我已经添加了一些更多的信息和一个示例,说明了我为什么实施了
停用
。老实说,我之所以认为deactivate是正确的钩子,是因为ember工具中生成的路由就是这样做的。但是为什么调用
转换到
而不等待
保存
的承诺会像我期望的那样呢?谢谢
willTransition
with
isDirty
绝对解决了我遇到的所有问题。路由器的改头换面彻底毁了我们,不是吗?英雄联盟