#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')
вычисляется немедленно и, таким образом, возвращает результат последней оценки, а не текущей.