2009-11-05 4 views
2

Je travaillais sur mon site Web quand je cam à travers ce problème, j'ai 100 messages dans mon blog et je pagine eux 10 à la fois, je montre le 1er 15 et affiche un lien à le fond qui est essentiellement mis en œuvre en utilisant la balise link_to_remote.Question concernant RJS et l'utilisation de link_to_remote

<%= link_to_remote "More Posts", :url => {:action => 'view' ,:id => link.to_i + 1} , :html => {:id => 'more-link'} %> 

je clique sur cela et obtenir les 15 postes, et l'ajouter au récipient contenant les 15 1ers messages par insert_html

page.insert_html :bottom, :puzzles , :partial => 'puzzles', :object => @puzzles 

Maintenant ce que je veux est le lien au bas de la page à mettre à jour aussi, de sorte que la prochaine fois que l'utilisateur clique plus le troisième lot est récupéré et ainsi de suite. Fondamentalement quelque chose comme

page.replace_html 'more-link', link_to_remote "More Posts", :url => {:action => 'view' ,:id => link.to_i + 1} , :html => {:id => 'more-link'} 

Des indices quant à comment je peux le faire?

Répondre

2

Vous êtes très proche.

replace_html est appelée avec (DOM_id, options de rendu). Essentiellement, vous voulez rendre la sortie d'un appel link_to_remote. Mais vous ne le transmettez pas sous une forme que le rendu peut utiliser. Comme le souligne Barry Hess, le remplacement est beaucoup mieux adapté à cette tâche, car la plupart de ce que vous modifiez sont les attributs de la balise. L'utilisation de replace_html résulterait en des balises imbriquées qui pourraient causer des problèmes.

Vous voulez remplacer l'élément entièrement. Remplacer a la même syntaxe de replace_html afin que vous rencontriez les mêmes problèmes si vous deviez simplement remplacer replace_html à remplacer.

Voici ce que vous voulez:

page.replace 'more-link', :text => link_to_remote "More Posts", 
    :url => {:action => 'view' ,:id => link.to_i + 1} , 
    :html => {:id => 'more-link'} 

Cependant, je ne suis pas sûr si link_to_remote est accessible à partir RJS. Si ce qui précède ne fonctionne pas, vous pouvez toujours le faire:

page.replace 'more-link', :inline => "<%= link_to_remote 'More Posts', 
    :url => {:action => 'view' ,:id => link.to_i + 1}, 
    :html => {:id => 'more-link'} %>", :locals => {:link => link} 
+2

En fait, 'page.replace' fonctionnerait mieux car il remplacerait l'élément entier, plutôt que le code HTML interne. Aussi, il pourrait être intéressant de créer une méthode d'aide pour ce 'link_to_remote' particulier afin que tous les paramètres URL et HTML ne soient pas répétés. –

+0

@Barry, vous avez absolument raison à propos de replace vs replace_html. En fait remplacer \ _html est complètement faux pour le travail. J'ai mis à jour la réponse à vos conseils et fourni une explication de ce qui fait que replace \ _html est faux. – EmFi

+0

La solution que vous m'avez donnée fonctionne parfaitement, maintenant si je veux avoir des conditions dans le fichier rjs, en gros si la valeur de link == -1 je veux remplacer le lien par une propriété html de disabled, comment faire? – Shiv