Как исправить ошибку превышения максимального размера стека вызовов в appmaker - PullRequest
1 голос
/ 17 мая 2019

Error I got

В настоящее время я проверяю виджет с полем даты, чтобы предотвратить регистрацию после 30-дневного льготного периода.Проверка даты работала, но после предупреждения предупредила, что она не снижается (я был здесь даже после нескольких щелчков).Также поле даты не обнуляется.

function checkDateValidate(widget) {
  var form = app.pages.Newitem.descendants;
  var otdate = form.otDateBox.value; 
  var date = new Date();
  var pastdate = date.setDate(date.getDate() - 31);

  if(otdate <= pastdate) {
    alert('Date exceeds within 30 days grace period is invalid.');
    form.otDateBox.value = null;
  }
}

Я ожидал очистить виджет окна даты.

1 Ответ

0 голосов
/ 17 мая 2019

Эта ошибка иногда происходит, потому что происходит бесконечный цикл, и это ваш случай. Очень важно понимать разницу между обработчиком событий onValueChange и обработчиком событий onValueEdit .

onValueChange :

Этот скрипт будет запускаться на клиенте всякий раз, когда изменяется значение этого виджета. На виджет можно ссылаться с помощью параметра widget, и новое значение виджета сохраняется в newValue.

onValueEdit :

Этот скрипт будет запускаться на клиенте всякий раз, когда значение этого виджета редактируется пользователем. На виджет можно ссылаться с помощью параметра widget, и новое значение виджета сохраняется в newValue. В отличие от onValueChange (), это выполняется только тогда, когда пользователь изменяет значение виджета; он не будет запускаться в ответ на привязки или когда значение задано программно.


Почему это происходит?

Поскольку ваша логика установлена ​​в обработчике события onValueChange , она будет срабатывать каждый раз, когда значение виджета dateBox изменяется, даже программно; Следовательно, form.otDateBox.value = null; вызывает логику снова и снова. Причина, по которой он вызывается снова и снова, заключается в логике сравнения:

if(otdate <= pastdate)

Здесь значение дата стало null , которое при преобразовании в число Number(null) равно 0 (ноль). Значение pastdate , очевидно, является числом больше нуля, например, 1555413900712 . Очевидно, что ноль меньше или равен 1555413900712, и поэтому вы запускаете бесконечный цикл.

Итак, в итоге, есть только один способ это исправить. Установите логику внутри обработчика событий onValueEdit вместо onValueChange .

...