Jak získat objekt z data-nette-rules

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

Zdravím,

mám takový přihlouplý dotaz,

jak získám objekt z nette-data-rules?

mám klasický input:

<input type="text" name="firstName" id="frmContactForm-firstName" required="required"
data-nette-rules="{op:':filled',msg:&quot;Toto pole je povin\u00e9!&quot;}" >

Pokud se ho snažím získat msg objektu přes JS, vždy mi vyhodí Undefined:

<script>
var rules = eval('[' + (el.getAttribute('data-nette-rules') || '') + ']');
console.log(rules.msg); // vyhodí vždy undefined
console.log(rules); //vypise objekt

[ Object
msg: "Please complete mandatory field."
op: ":filled"
__proto__: Object ]

// to samé v jQuery
var rules = $('#frmContactForm-firstName').data('nette-rules');
console.log(rules.msg); // undefined
console.log(rules); // vypise {op:':filled',msg:'Please complete mandatory field.'}
</script>
svagi
Člen | 15
+
0
-

Tak už jsem našel odpověď pro JS:

<script>
var obj = eval('(' + el.getAttribute('data-nette-rules') + ')');
console.log(obj.msg) // vypise msg
</script>

Více na http://www.json.org/js.html.

Snad se to bude někomu taky hodit. :)

Editoval svagi (13. 8. 2012 15:58)

Ot@s
Backer | 476
+
0
-

var obj = jQuery.parseJSON( $reqs[i].getAttribute('data-nette-rules') );

svagi
Člen | 15
+
0
-

Ot@s napsal(a):

var obj = jQuery.parseJSON( $reqs[i].getAttribute('data-nette-rules') );

Přesně takhle to nešlo, v jQuery jsem funkční řešení zatím nenašel..

ViPEr*CZ*
Člen | 817
+
0
-
var rules = $('#frmContactForm-firstName').data('nette-rules');
var json = jQuery.parseJSON(rules);

Takhle by to mělo jít. Možná tam vadí ta entita ". Pokud to nejde zkusil bych to zaměnit za klasické uvozovky přes nějaký String.replace.

jtousek
Člen | 951
+
0
-

Metoda jQuery.parseJSON nemůže fungovat protože obsah data-nette-rules vůbec není json. Je to kvůli těm preg_replace které odstraňují uvozovky.

Editoval jtousek (13. 8. 2012 16:45)

ViPEr*CZ*
Člen | 817
+
0
-

Tak to jsem se trefil… a z hlavy :-)