netteForms.js:64 – maximum call stack size exceeded

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Tomáš Votruba
Moderator | 1114
+
0
-

Na hlavní stránce (BasePresenter) mi netteForms.js funguje, nicméně na podstránce již ne a spolu s ním i (zřejmě) všechny následující.

Přes Chrome jsem odhalil, že existuje nějaká chyba na 64. řádku – maximum call stack size exceeded.
Jde údajně o nějakou rekurzivní záležitost, která vyčerpá paměť. Čím by to mohlo být způsobeno? Chybně zapsaný pravidlem?

Jdu je zatím prozkoumat. Těším se na vaše rady, díky.

<script>
Nette.validateControl = function(elem, rules, onlyCheck) {
    rules = rules || eval('[' + (elem.getAttribute('data-nette-rules') || '') + ']'); // 64. řádek
netteForms.js:64Uncaught RangeError: Maximum call stack size exceeded
    for (var id = 0, len = rules.length; id < len; id++) {
        var rule = rules[id], op = rule.op.match(/(~)?([^?]+)/);
        rule.neg = op[1];
        rule.op = op[2];
        rule.condition = !!rule.rules;
        var el = rule.control ? elem.form.elements[rule.control] : elem;

        var success = Nette.validateRule(el, rule.op, rule.arg);
        if (success === null) { continue; }
        if (rule.neg) { success = !success; }

        if (rule.condition && success) {
            if (!Nette.validateControl(elem, rule.rules, onlyCheck)) {
                return false;
            }
        } else if (!rule.condition && !success) {
            if (el.disabled) { continue; }
            if (!onlyCheck) {
                Nette.addError(el, rule.msg.replace('%value', Nette.getValue(el)));
            }
            return false;
        }
    }
    return true;
};
</script>
Tomáš Votruba
Moderator | 1114
+
0
-

Tak chyba je ve validačním pravidlu pluginu datePicker:

<?php

$form = new Form;
$form->addDatePicker("date","Den:")
	->setDefaultValue($this->currentDate)
	->addRule(Form::FILLED,"Vyplňte datum");
	->addRule(Form::VALID,"Datum nemá správný formát"); // bugující pravidlo

?>

Bez tohoto pravidla se zřejmě při nejhorším obejdu, nicméně kdo by viděl v datePicker.php – https://github.com/…tePicker.php#L188 související chybu, může napsat řešení.

Editoval Schmutzka (17. 10. 2011 19:30)