Ruby Forum Rails France > AJAX et position

Posted by Alfref Bouton (guillomme)
on 02.05.2008 21:29
Bonjour, debutant en Ajax sous ruby, je coince sur un petit probleme...

Voila j'ai une div que je souhaiterai mettre a jour en rajoutait du
texte a la suite, mais ca me remplace seulement le texte

Je vous mets tous le code concernant :

La vue :

<%= javascript_include_tag :defaults %>


<div id='themoney'></div>
<%= link_to_remote ("Show me the money!",
    :url => { :action => 'getmoney' },
  :update => 'themoney',
    :postion => 'top')
  %>

Le controleur est vide.

Et la vue de 'getmoney' est tout simplement

<p>Test</p>

Merci d'avance
Posted by Tony Chauveau (kusanar)
on 02.05.2008 22:09
Alfref Bouton wrote:
> Bonjour, debutant en Ajax sous ruby, je coince sur un petit probleme...
> 
> Voila j'ai une div que je souhaiterai mettre a jour en rajoutait du
> texte a la suite, mais ca me remplace seulement le texte
> 
> Je vous mets tous le code concernant :
> 
> La vue :
> 
> <%= javascript_include_tag :defaults %>
> 
> 
> <div id='themoney'></div>
> <%= link_to_remote ("Show me the money!",
>     :url => { :action => 'getmoney' },
>   :update => 'themoney',
>     :postion => 'top')
>   %>
> 
> Le controleur est vide.
> 
> Et la vue de 'getmoney' est tout simplement
> 
> <p>Test</p>
> 
> Merci d'avance

Si ton objectif est d'ajouter du texte à la suite du contenu existant 
utilise ceci dans ton controller :

def getmoney
  render :update do |page|
    page.insert_html :bottom, 'themoney', "<p>Test</p>"
  end
end

Tu peux aussi place ton page.insert_html dans ta vue getmoney en la 
renommant en getmoney.rjs
Posted by Alfref Bouton (guillomme)
on 02.05.2008 22:53
Tony Chauveau wrote:
> Alfref Bouton wrote:
>> Bonjour, debutant en Ajax sous ruby, je coince sur un petit probleme...
>> 
>> Voila j'ai une div que je souhaiterai mettre a jour en rajoutait du
>> texte a la suite, mais ca me remplace seulement le texte
>> 
>> Je vous mets tous le code concernant :
>> 
>> La vue :
>> 
>> <%= javascript_include_tag :defaults %>
>> 
>> 
>> <div id='themoney'></div>
>> <%= link_to_remote ("Show me the money!",
>>     :url => { :action => 'getmoney' },
>>   :update => 'themoney',
>>     :postion => 'top')
>>   %>
>> 
>> Le controleur est vide.
>> 
>> Et la vue de 'getmoney' est tout simplement
>> 
>> <p>Test</p>
>> 
>> Merci d'avance
> 
> Si ton objectif est d'ajouter du texte à la suite du contenu existant 
> utilise ceci dans ton controller :
> 
> def getmoney
>   render :update do |page|
>     page.insert_html :bottom, 'themoney', "<p>Test</p>"
>   end
> end
> 
> Tu peux aussi place ton page.insert_html dans ta vue getmoney en la 
> renommant en getmoney.rjs

Lorsque je modifie le controleur ca m'ecrit :

try { new Insertion.Bottom("themoney", 
"\u003Cp\u003ETest\u003C/p\u003E"); } catch (e) { alert('RJS error:\n\n' 
+ e.toString()); alert('new Insertion.Bottom(\"themoney\", 
\"\\u003Cp\\u003ETest\\u003C/p\\u003E\");'); throw e }

J'ai deja eu ce probleme une fois, sans trouver de solution :(

Pour ce qui est de mettre dans le .rjs j'ai dut sauté une etape, ca ne 
m'affiche rien du tout...

Je dois juste mettre les 3 lignes dans getmoney.rjs ?

Merci
Posted by mourad hammiche (Guest)
on 03.05.2008 02:42
(Received via mailing list)
Bonjour,

Le fichier rjs ne doit contenir que la ligne

page.insert_html :bottom, 'themoney', "<p>Test</p>"

L'objet page est automatiquement crée par le framework.

Pour ce qui est du message :

try { new Insertion.Bottom("themoney",
"\u003Cp\u003ETest\u003C/p\u003E"); } catch (e) { alert('RJS error:\n
\n'
+ e.toString()); alert('new Insertion.Bottom(\"themoney\",
\"\\u003Cp\\u003ETest\\u003C/p\\u003E\");'); throw e }

Si je comprends bien, ce code apparait tel quel au lieu d'etre
executé ?
Je pense que "prototype" n'est pas chargé 
Il faudrait placer la ligne ci-dessous

...
<head>
...
<%= javascript_include_tag :defaults %>
...
</head>
...

dans app/view/layouts/application.rhtml à l'interieur de la balise
<head>
Posted by Alfref Bouton (guillomme)
on 03.05.2008 10:44
Bonjour,

Alors j'ai resolu un probleme, en effet, maintenant il prend en compte 
mon .rjs, le probleme etait qu'il y avait toujours le .html.erb et quil 
chargait donc celui la en priorite...

Par contre, il ne veut toujours pas m'interpreter le javascript :(
J'ai toujours le message :
try { new Insertion.Bottom("themoney", 
"\u003Cp\u003ETest\u003C/p\u003E"); } catch (e) { alert('RJS error:\n\n' 
+ e.toString()); alert('new Insertion.Bottom(\"themoney\", 
\"\\u003Cp\\u003ETest\\u003C/p\\u003E\");'); throw e }

Je vous mets le code source de la page une fois generer, peut etre une 
erreur que je n'arrive pas a voir ...

<html>
<head>
<script src="/javascripts/prototype.js?1202578156" 
type="text/javascript"></script>
<script src="/javascripts/effects.js?1202578156" 
type="text/javascript"></script>
<script src="/javascripts/dragdrop.js?1202578156" 
type="text/javascript"></script>
<script src="/javascripts/controls.js?1202578156" 
type="text/javascript"></script>
<script src="/javascripts/application.js?1202578156" 
type="text/javascript"></script>
</head>
<body>
<div id='themoney'></div>
<a href="#" onclick="new Ajax.Updater('themoney', '/admin/getmoney', 
{asynchronous:true, evalScripts:true}); return false;">Show me the 
money!</a>

</body>
</html>

Et en bonus le code de la vue :

<html>
<head>
<%= javascript_include_tag :defaults %>
</head>
<body>
<div id='themoney'></div>
<%= link_to_remote ("Show me the money!",
    :url => { :action => 'getmoney' },
  :update => 'themoney',
    :postion => 'top')
  %>
</body>
</html>

Merci d'avance parceque la je n'arrive vraiment pas a voir d'ou vient le 
probleme, et je debute en AJAX :(
Posted by Tony Chauveau (kusanar)
on 03.05.2008 10:50
Alfref Bouton wrote:
> Et en bonus le code de la vue :
> 
> <html>
> <head>
> <%= javascript_include_tag :defaults %>
> </head>
> <body>
> <div id='themoney'></div>
> <%= link_to_remote ("Show me the money!",
>     :url => { :action => 'getmoney' },
>   :update => 'themoney',
>     :postion => 'top')
>   %>
> </body>
> </html>
> 
> Merci d'avance parceque la je n'arrive vraiment pas a voir d'ou vient le 
> probleme, et je debute en AJAX :(

excuse moi, j'ai oublié de te dire d'enlever ceci dans ton
link_to_remote :
   :update => 'themoney',

C'est ton rjs qui fait la mise à jour, tu n'as donc pas besoin de la
faire en retour de fonction
Posted by Jean-François Trân (Guest)
on 03.05.2008 10:52
(Received via mailing list)
2008/5/3 Alfref Bouton :

> <div id='themoney'></div>
>  <%= link_to_remote ("Show me the money!",
>     :url => { :action => 'getmoney' },
>   :update => 'themoney',
>     :postion => 'top')
>   %>

à noter que tu as toujours la typo :postion au lieu de :position

   -- Jean-François.

--
RailsCamp Paris le samedi 17 mai 2008 :
http://rubyfrance.org/evenements/railscamp-paris
Posted by Alfref Bouton (guillomme)
on 03.05.2008 10:52
En effet ca marche beaucoup mieux comme ca :)
Merci je vais pouvoir avancer un peu :)