JS validace formulářů – vlastní typ pravidla

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Foowie
Člen | 269
+
0
-

Neexistuje/nebylo by vhodné do netteForms.js metody Nette.validateRule přidat možnost přidat vlastní validační callback? Řekněme něco takového:

Nette.customRules = new Array();

Nette.addRule = function(callback) {
	Nette.customRules.push(callback);
};

Nette.validateRule = function(elem, op, arg) {
	var val = Nette.getValue(elem);
	if (elem.getAttribute) {
		if (val === elem.getAttribute('data-nette-empty-value')) { val = null; }
	}

	for(rule in Nette.customRules) {
		var result = Nette.customRules[rule](val, elem, op, arg);
		if(result !== null)
			return result;
	}
	...
Filip Procházka
Moderator | 4668
+
0
-

Líbí se mi to, ale chtělo by to nějak zapracovat, aby to validační pravidlo šlo zapsat nějak na jednom místě.
Teď je tam nějaký switch afaik, to by ale neměl být problém.

Vymysli pěkné API a pošli push :)

redhead
Člen | 1313
+
0
-

David to má v plánu předělat ( viz Davidův post/moji citaci: https://forum.nette.org/…m-validation?p=2 )

Jinak určitě by to chtělo dělat i včetně podmínek condition a conditionOn.

Editoval redhead (4. 2. 2011 11:34)

redhead
Člen | 1313
+
0
-

Zkusil jsem něco udělat a poslal jsem pull request (https://github.com/…tte/pull/186).

Všechna pravidla jsem přepsal do funkcí v Nette.validators kontejneru.

Pokud ve formu uděláte callback pravidlo na nějakou třídu (např. Helper::validateOdd), JS se bude snažit zavolat metodu Nette.validators.odd().

jtousek
Člen | 951
+
0
-

Ono by to spíš chtělo, aby David ukázal nové formuláře a validátory a zapracovat to tam.

redhead
Člen | 1313
+
0
-

To by chtělo no. Jinak ty pravidla se asi tak markantně měnit nebudou (třeba).

David Grudl
Nette Core | 8218
+
0
-

Je to tam. Ale po překlopení na novou verzi formulářů se to asi trošku změní.

Vlastní validátor se dá zadat takto:

PHP:
	->addRule('MyValidators::size', ...)


JS:
Nette.validators.MyValidators_size = function(elem, args, val) {
	....
};
Ondřej Mirtes
Člen | 1536
+
0
-

Co se inspirovat touhle AJAXovou validací? Pokud by nebyla přítomná daná funkce na klientovi, sáhlo by se na server…