灰烬:检测保存对象的时间

时间:2015-11-30 18:03:50

标签: ember.js ember-data

在我的余烬代码的某个地方我有

myobject.save();

我想检测保存何时完成。因为那时对象已经获得了ID。

我知道save方法返回一个promise,我可以使用then()在保存完成后执行代码。但这种模式在我的案例中不起作用。

我的代码中的其他地方我正在做几件事然后我想得到myobject的ID。然后我可能要等到对象完成保存并获得ID。我需要id,因为它应该是转换到动态路由的一部分。路由操作处理程序中的代码如下所示:

myobject.DoSomeStuffAndThenSave();
....
// Do some other stuff that might take some time
....
this.transitionTo('myroute', myobject.get('id'));

我想我需要检查isSaving标志,如果isSaving标志为真,我应该听isUpdated事件。但是我该怎么做?

1 个答案:

答案 0 :(得分:1)

你可以在你的方法中返回另一个承诺,做一些可能需要一些时间的其他事情。然后将您的路由转换放在该承诺的.then()中:

// models/myobject.js
export default DS.Model.extend({
  // ...

  aLongRunningMethod () {
    return new Ember.RSVP.Promise((resolve, reject) => {
      // do whatever long process you need to do here
      resolve();
    });
  }
});

// whatever file you're saving the model in
myobject.aLongRunningMethod().then(() => {
  myobject.save().then(obj => {
    this.transitionTo('myroute', obj.get('id'));
  });
});

或者如果您需要先保存它,您可以按相反的顺序使用这些方法:

myobject.save().then(obj => {
  obj.aLongRunningMethod().then(() => {
    this.transitionTo('myroute', obj.get('id'));
  });
});