2010-02-12 10 views
24

J'étais juste en train de jouer avec Rails 3 beta et j'ai remarqué que link_to_function est maintenant parti. Je présume qu'il existe une autre méthode pour atteindre le même résultat (événement onclick?) Mais je me demandais s'il y avait une façon plus Rails-3'y de le faire. TIA.Où est-ce que link_to_function a disparu dans Rails 3?

+2

Pour toute personne qui trouve cela par Google, il convient de noter que link_to_function est à la fois à Rai ls 3 et NON déprécié. Voir https: // github.com/rails/rails/commit/d69e561 Ou la réponse ici: http://stackoverflow.com/questions/5063246/rails-3-status-of-link-to-function-method – noel

Répondre

27

Rails 3 semble avoir éliminé Prototype Helper en faveur d'une approche agnostique moins gênante/bibliothèque JS. L'objectif est d'éliminer tout javascript en ligne généré par Rails. Prototype Helper a généré à peu près tout le javascript.

Maintenant, l'une des variantes non auxiliaires d'aides générera le javascript approprié pour un appel distant dans votre bibliothèque JS de choix en fournissant simplement l'option: remote => true.

Malheureusement cela ne vaut pas pour les méthodes de fonction x. Pour le moment, il y a les prototype legacy helpers qui ne font plus partie de Rails.

Vous pouvez également utiliser call comme défini dans ActionView :: Helpers :: PrototypeHelper :: JavascriptGenerator :: GeneratorMethods pour fournir le code javascript à: onclick en tant qu'option html pour link_to, mais ce n'est pas vraiment joli.

Exemples:

Rails < 3      | Rails 3 
link_to_remote "target", url | link_to "target", url, :remote => true 
form_remote_for @post   | form_for @post, :remote => true 

etc ....

Ou quelque chose à cet effet. J'ai de la difficulté à trouver des documents officiels pour appuyer mes demandes. Donc, le release notes devra faire pour l'instant.

Avant de pouvoir l'utiliser, vous devez inclure les fichiers source js appropriés. Assurez-vous de charger à la place prototype.js et rails.js, ou la bibliothèque et le pilote du framework JS de votre choix.

Rappelez-vous, Rails 3 est en version bêta maintenant. Mais cela ne veut pas dire que c'est fait. Honnêtement, je n'ai aucune idée de la façon dont link_to_function sera remplacé. Cela va à l'encontre de l'idéal du JavaScript non intrusif.

+0

La question était à propos de link_to_function (ie. appelez javascript directement et sans les trucs UJS). Merci pour l'info quand même. – Psynix

+0

J'ai manqué la "fonction" quand j'ai écrit ça. J'ai mis à jour la solution avec une meilleure réponse à la question spécifique. – EmFi

8

Pour répondre à ma propre question, semble que cela fonctionne et est suffisant pour ce que je dois:

link_to "name", nil, :onlick => "alert('Hello, world!')" 
+9

le problème avec cette solution est totalement intrusif. Je vous recommande de jouer avec jquery ou prototype + low pro. –

+1

Je ne pense pas que ce soit "totalement" envahissant, tant que vous appelez simplement un gestionnaire de onclick = "" au lieu de l'implémenter là. L'ensemble de l'UJS n'est pas encore mature et même ses créateurs ne sont pas d'accord sur ce qui est recommandé (voir http://weblog.jamisbuck.org/2010/3/2/unobtrusive-yet-explicit incluant les commentaires). – Matt

0

link_to_remote peut se faire comme ça

link_to "cible",: distance => true

et de faire un post ajax/get vous avez

link_to "cible", {: controller => contrôleur,: action => méthode,},: distance => true

Dans rails 2, il était comme cet objectif

link_to_remote » »: url => {: controller => contrôleur,: action => méthode ,},: distance => true