Асинхронные операции при модальном обратном вызове

#javascript #coffeescript #meteor #semantic-ui

#javascript #coffeescript #метеор #семантический пользовательский интерфейс

Вопрос:

Я использую семантический интерфейс пользовательского интерфейса, чтобы позволить пользователям вставлять данные. У него есть обратный вызов onApprove, который позволяет вам возвращать false, чтобы сохранить модальный режим открытым, если возникнут какие-либо проблемы. Мои данные вставляются в базу данных, которая возвращает false при возникновении какой-либо ошибки. Каков наилучший способ сохранить модальный режим открытым, если во время этой асинхронной операции возникает ошибка?

Вот мой код (coffeescript):

 $('#verification-modal')
.modal('setting', {
    detachable: false,
    onApprove: validateVerificationForm
    closable: false
})

 validateVerificationForm = () ->
      formData = $('.form').serializeArray()
      formatted = format($formData);

      ID_Details.insert(formatted, (errs, id) ->
         if errs
             false
         else
            true
  

Очевидно, что анонимная функция возвращает true / false в контекст функции. Каков наилучший способ вернуть его в модальный?

Комментарии:

1. Вы можете вернуть false при успешном выполнении всех условий, а затем закрыть его с помощью $('.modal').modal('hide')

Ответ №1:

Вы можете использовать локальную реактивную переменную:

 var data = new ReactiveDict();

Template.modalTemplate.created = function() {
  data.set('isError', false);
};

Template.modalTemplate.helpers({
  isError: function() {
    return data.get('isError');
  },
});

var yourMethodWithAsync = function() {
  ...
  async(..., function(error) {
    if(error) {
      data.set('isError', true);
    }
    ...
  });
};
  

Комментарии:

1. Это классная идея, но не работает isError: функция() { yourMethod withasync() возвращает data.get(‘isError’); } return data.get('isError') вычисляется немедленно и, таким образом, возвращает результат последней оценки, а не текущей.