2013-03-05 10 views
14

Ultimamente, sto riscontrando problemi con gli attributi di dati personalizzati HTML nella mia applicazione rails. Mi utente il seguente schema per aggiungere alcuni dati attribuisce ai tag html e usarli più tardi nella mia javascript (jQuery) Codice:rails e attributi di dati html: usa dash (-) o underscore (_)?

= %a.name{ href: "url.com", data: {first_name: "ben", last_name: "amsalem} } 

nel codice JavaScript accedo quegli attributi:

alert($(".name").data("first_name") + " " + $(".name").data("last_name")); 

Nel mio ambiente di sviluppo va bene e ottengo il risultato atteso (lo stesso vale per il mio ambiente di produzione in passato), ma nella mia attuale versione di produzione ottengo valori "indefiniti". Ho controllato il codice HTML della pagina e ho visto che ora ho qualcosa di simile:

<a class="name" href="url.com" data-first-name="ben" data-last-name="amsalem" /> 

Invece di:

<a class="name" href="url.com" data-first_name="ben" data-last_name="amsalem" /> 

Perché succede? Cosa causa il cambiamento?

+0

Sembra che ora sia più corretto e per accedervi è necessario '.data (" lastName ")' Hai aggiornato i binari? Questo potrebbe spiegare il cambiamento. –

+0

http://stackoverflow.com/questions/8734722/rails-link-to-helper-with-data-attribute – MrYoshiji

+0

È preferibile non utilizzare caratteri di sottolineatura nei nomi degli attributi. So per certo in MVC che gli helper Html convertiranno i caratteri di sottolineatura in trattini. easiler per usare semplicemente 'data-firstname' ad esempio – musefan

risposta

0

Dopo i test che ho fatto: sembra in fase di sviluppo ho avuto gemme in versione 3.2.9, e nella produzione è stato 3.2.12 - il male comportamento (convertire in <a date-last_name/>) è stato risolto tra quelle versioni, e dopo aver aggiornato la mia versione di sviluppo posso vedere il cambiamento.

12

È perfettamente normale, data: { first_name: "ben" } dovrebbe produrre data-first-name="ben".

Il modo migliore per accedere a questo attributo è con .data("firstName"), ma anche .data("first-name") funzionerebbe.

+0

Sono d'accordo, è corretto e normale. Ma nelle versioni precedenti era data-first_name, quindi il mio codice JavaScript è data ("first_name"). Cosa ha fatto questo cambiamento? – benams

+0

Per quanto ne so, rails non ha mai generato 'data-first_name' quando si utilizza questa sintassi' {data: {first_name: ""}} ', ma potrei sbagliarmi. Forse stavi usando la versione della stringa, come 'data: {" first_name "=>" ben "}'. Altrimenti, non ne ho idea. – Robin

+0

no, ho controllato di nuovo e uso la versione del simbolo e non quella della stringa. è un po 'strano, perché sono sicuro al 100% che funzionava nella mia vecchia versione e funziona ancora nell'ambiente di sviluppo. – benams

4

Suppongo che tu stia utilizzando HAML. Hypernation viene fornito come predefinito dalla 4.0. Impostare hyphenate_data_attrs su false per disattivarlo.

Documentazione: http://haml.info/docs/yardoc/Haml/Options.html#hyphenate_data_attrs-instance_method

originale discussione github tiro: https://github.com/haml/haml/pull/488

+0

Ma non ci dovrebbero essere caratteri di sottolineatura in primo luogo, dal momento che le rotaie generano 'data-first-name', giusto? – Robin

+0

I caratteri di sottolineatura di @Robin non sono stati sostituiti automaticamente con hyphens pre v.4.0: https://github.com/haml/haml/issues/478 – darshanags

+0

Il mio male, sono così abituato alla sintassi dei binari, che non ho notato che in realtà non stava usando un aiutante di rotaie, ma haml. Quindi sì, hai ragione, e penso che questa dovrebbe essere la risposta accettata. – Robin

Problemi correlati