【问题标题】:Ember: Detect when an object is savedEmber:检测对象何时被保存
【发布时间】:2015-12-01 05:46:49
【问题描述】:

在我的 ember 代码中的某个地方

myobject.save();

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

我知道save 方法返回一个承诺,我可以在保存完成后使用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 事件。但是我该怎么做呢?

【问题讨论】:

    标签: ember.js ember-data


    【解决方案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'));
      });
    });
    

    【讨论】:

    • 谢谢,我让它与 Promises 一起工作。这有点难以掌握,但超越简单的承诺 save().then() 绝对是一种有用的技术。
    猜你喜欢
    • 2016-06-30
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多