2009-08-18 8 views

Répondre

0

Oui, console.log("error message goes here")

+0

je pense qu'il voulait dire les alertes, que rjs génère;) – tliff

+0

Oui, Rails fait beaucoup de choses à lui seul, je suppose que je devrais ajouter le tag rjs –

0

Cela dépend de l'erreur Javascript. Puisque JavaScript est interprété par le client, vous devez afficher les messages d'erreur côté client. Le seul moyen de consigner les erreurs dans le fichier journal du serveur est de savoir si l'erreur se produit du côté du serveur avant que le Javascript ne soit interprété par le client.

+0

Vous avez absolument raison, mais console.log est un javascript fonction pour les outils de débogage du navigateur (inspecteur de webkit, firebug, et la nouvelle chose d'IE8) que j'essaie d'utiliser à la place de Rails par défaut alert(). –

3

Vous pouvez remplacer window.alert:

var oldAlert = window.alert; // reference to the original window.alert 

window.alert = function(message) { 
    if (window.console && console.log) { 
    console.log(message); 
    } else { 
    oldAlert(message); // if console.log doesn't exist call window alert 
    } 
} 
+2

Cela fonctionnerait mais c'est assez brutal imho. Mais encore bonne solution donc +1 – marcgg

+0

Solution pour maintenant! Mais je veux vraiment explorer ce plugin ci-dessous - juste au cas où je dois utiliser alerte dans l'application (ce que je ne fais jamais, je considère les popups dans presque toutes les formes de blasphème) –

+0

si vous utilisez le paramètre: confirmer dans les liens, il utilisera également l'alerte – tliff

0

Vous pouvez essayer de désactiver le débogage de RJS dans votre fichier environment.rb:

config.action_view.debug_rjs = false

Cela devrait désactiver les alertes tout à fait. Une autre option serait PRÉPONDÉRANTS ActionView::Helpers::GeneratorMethods#to_s:

module ActionView 
    module Helpers 
    module GeneratorMethods 
     def to_s #:nodoc: 
     returning javascript = @lines * $/ do 
      if ActionView::Base.debug_rjs 
      source = javascript.dup 
      javascript.replace "try {\n#{source}\n} catch (e) " 
      javascript << "{ console.log('RJS error:\\n\\n' + e.toString()); console.log('#{source.gsub('\\','\0\0').gsub(/\r\n|\n|\r/, "\\n").gsub(/["']/) { |m| "\\#{m}" }}'); throw e }" 
      end 
     end 
     end 
    end 
    end 
end 

Je dois admettre que je suis hors de ma profondeur jusqu'à redéfinissant la méthode va, et je ne sais pas si c'est une pratique recommandée. Je n'ai pas eu besoin de faire quelque chose comme ça dans mes projets.

Ma préférence personnelle serait de sauter RJS et aller avec discret jQuery.

+0

Je ne sais pas comment le prototype est plus envahissant ... mais de toute façon, je vais donner un prototype/scriptaculous un tir. La plupart des choses que je fais est xhr lourd, donc je voudrais "garder dans la famille" au lieu de déconner avec JS séparément. Je suis moi-même un mootool et je peux déjà me voir vouloir l'utiliser. –

+0

Je suis sûr que vous pouvez aller discret avec le prototype, mais cela signifierait renoncer à utiliser beaucoup d'aides AFAIK. J'aime écrire et contrôler mon JS pour que ça fonctionne pour moi. –

Questions connexes