Rjs tester l'existance d'un objet

Bonjour,

une question peut être simple mais je ne trouve pas la réponse.
En RJS j’effectue une action sur un objet du DOM. Cependant je n’ai
aucun garantie que cet objet existe sur la page en cours du user.

Actuellement en dev j’obtiens donc une popup js d’erreur. Pas moyen de
tester l’existence de l’objet sans obtenir cette popup. Existe t-il un
moyen de la tester ou bien en prod je n’aurais pas cette popup (qui ne
s’affiche qu’en environnement de dev si j’ai bien compris) ?

Tu devrais pouvoir trouver la réponse dans ce railscast :

Le dimanche 06 juillet 2008 à 17:30 +0200, Michel B. a écrit :

Tu devrais pouvoir trouver la réponse dans ce railscast :
#45 RJS Tips - RailsCasts

bah là il test si un champs contient ‘foo’ mais pas si le champs existe.

Le dimanche 06 juillet 2008 à 17:46 +0200, Frédéric Logier a écrit :

Le dimanche 06 juillet 2008 à 17:30 +0200, Michel B. a écrit :

Tu devrais pouvoir trouver la réponse dans ce railscast :
#45 RJS Tips - RailsCasts

bah là il test si un champs contient ‘foo’ mais pas si le champs existe.

Bon en fait j’ai encadré le code rjs sensible par un try catch :
page << “try {”
page.visual_effect :highlight, “comment_#{@parent.id}”
page[“comment_#{@parent.id}”].innerHTML = “#{@parent.nb_comment}
commentaire(s)”
page << “} catch (e) {}”

le fait qu’il y ait déjà un try catch généré par rails en dev ne semble
pas poser problème, apparemment on peut les encapsuler.

Frédéric Logier a écrit :

Bon en fait j’ai encadré le code rjs sensible par un try catch :
page << “try {”
page.visual_effect :highlight, “comment_#{@parent.id}”
page[“comment_#{@parent.id}”].innerHTML = “#{@parent.nb_comment}
commentaire(s)”
page << “} catch (e) {}”

Et le simple test
page << “if($(‘comment_#{@parent.id}’) == null){return;}”

Ca marche pas?

Le 6 juillet 2008 17:57, Frédéric Logier a écrit :

pas poser problème, apparemment on peut les encapsuler.
J’écrirais plutôt :

dom_id = “#comment_#{@parent.id}”

page.select(dom_id).each do |element|
element.visual_effect :highlight
element.replace_html “#{@parent.nb_comment} commentaire(s)”
end

Le $$(…) retourne au plus un élément du DOM.
Si l’élement d’id dom_id n’existe pas, il ne se passera rien.

– Jean-François.


http://twitter.com/underflow_

Le lundi 07 juillet 2008 à 11:00 +0200, Sébastien Lamy a écrit :

Ca marche pas?

En fait j’ai plusieurs variables dans ce cas, donc ca me parait plus
simple d’englober tout le rjs dans un try catch plutôt que tester chaque
variable.