2015-11-30 2 views
0

Где-то в моем Ember коде естьEmber: Обнаружение, когда объект будет сохранен

myobject.save(); 

Я хочу, чтобы обнаружить, когда это сохранение делается. Потому что тогда объект получил идентификатор.

Я знаю, что метод save возвращает обещание, и я могу использовать then() для выполнения кода при сохранении. Но эта модель не будет работать в моем случае.

Где-то еще в моем коде я делаю несколько вещей, а затем хочу получить идентификатор myobject. Тогда мне, возможно, придется подождать, пока объект не завершит сохранение и получил идентификатор. Мне нужен идентификатор, потому что он должен быть частью перехода к динамическому маршруту. Код в обработчик маршрута действий выглядит следующим образом:

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

Я думаю, мне нужно проверить isSaving флаг и и в случае isSaving флаг верно, я должен слушать isUpdated события. Но как мне это сделать?

ответ

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')); 
    }); 
}); 
+0

Thanx, я получил его для работы с обещаниями. Это немного сложно понять, но обещает не просто 'save(). Then()' определенно полезный метод. –