Вернуть обещание от действия контроллера в Ember?
У меня есть компонент, который должен взаимодействовать с контроллером и в конечном итоге выполнить некоторую очистку после того, как контроллер говорит, что все в порядке (т. Е. JQuery "un"-initialization). Я думаю, что лучший способ сделать это - пообещать, что компонент сможет очиститься после того, как контроллер выполнит свою задачу. Но как действие контроллера может вернуть обещание? Или же компонент может вызывать динамический метод непосредственно на контроллере?
Например, допустим, у меня есть ModalDialogComponent
,
App.ModalDialogComponent = Ember.Component.extend
didInsertElement: ->
@$('.modal').modal('show')
actions:
save: ->
@sendAction('save').then(@closeModal.bind(@))
# some other actions are omitted
closeModal: ->
@$('.modal').modal('hide')
И я могу создать экземпляр компонента внутри шаблона с именем foo
,
{{modal-form save="save" ...}}
И реализовать save
метод на FooController
App.FooController = Ember.ObjectController.extend
save: ->
# how can we tell the component that this was successful?
Как видите, я хочу только closeModal
функция для выполнения, если save
действие было успешным. Другими словами, закрывайте модальные только в том случае, если запись была успешно сохранена.
Возможно ли это, или я полностью ошибаюсь?
1 ответ
send
а также sendAction
Это улица с односторонним движением, и, как говорится, вы можете отправить отсрочку к действию и ожидать, что она разрешит / отклонит ее.
var defer = Ember.RSVP.defer();
defer.promise.then(function(resolvedValue){
alert(resolvedValue);
});
setTimeout(function(){
defer.resolve('hello world');
},2000);
Ваш будет выглядеть примерно так
var defer = Ember.RSVP.defer(),
self = this;
defer.promise.then(function(){
self.closeModal();
},
function(){
alert('error');
});
this.sendAction('save', defer);
сохранить действие
actions: {
save: function(defer){
// if succeeded
defer.resolve();
// or if failure occurs
defer.reject();
}
}
Будьте осторожны, вы должны быть уверены, что не пропустите маршрут отклонения, вам не хотелось бы, чтобы там висел модальный режим, потому что сохранение не удалось и не было метода сбоя.
Извините, я не конвертировал в сценарий кофе, я полагаю, вы либо поймете, либо конвертируете и поймете, и я не дам вам неправильного ответа.