2011-04-29 2 views
1

Ce n'est pas clair pour moi d'utiliser correctement les modèles Rails JS. Ils remplacent essentiellement le rappel de succès sur une demande AJAX, non? Pourquoi serait-il utile de séparer le JS exécuté lorsque la requête est un succès du JS qui s'exécute pour les différents autres callbacks? Cela suppose bien entendu que je lie un gestionnaire de clic ou quelque chose à un lien et que je fasse une requête AJAX de cette façon. Je pourrais bien sûr utiliser un link_to avec :remote => true. Je suppose que dans ce cas, il serait logique d'utiliser des modèles JS. Mais alors que faites-vous si vous avez besoin de gérer d'autres cas en plus du succès? Lier un événement ajax:failure au lien généré par le link_to? Cela signifierait maintenir JS lié à ce lien dans deux endroits distincts. Et que se passe-t-il s'il y a deux liens (disons avec un balisage différent) qui font tous deux une demande à cette action, mais chacun nécessitant des JS différents à exécuter parce qu'ils doivent se comporter différemment lorsqu'ils sont cliqués? Comment géreriez-vous cela avec un modèle JS?Quelle est la bonne façon d'utiliser les modèles Rails JS?

Est-ce que je pense à ce droit?

Répondre

1

Je pense que le meilleur moyen est d'éviter les templates js. C'est une aberration d'essayer d'écrire du code js dans ruby ​​... C'est mon avis, mais l'alternative est beaucoup plus propre et plus simple car vous écrivez le code dans la langue actuelle. Alors, écrivez votre javascript qui fait l'appel à l'URL fournie dans votre lien, puis demandez le contenu dans json. Dans votre contrôleur, il suffit de renvoyer les données dans json (il peut s'agir d'une liste d'objets avec des données, ou juste un objet comme: {success: true} ou {success: false} .Dans votre js, vous traitez l'objet et faites le l'action correspond le. dans différentes parties qui pointent vers la même URL que vous pouvez prendre différentes actions dans votre js.

+0

droit, c'est ce qui a toujours fait pour moi le plus de sens. J'essaie juste de comprendre si peut-être je mal compris comment utiliser les modèles JS. –

+0

Oh, aussi, comment vous sentez-vous à propos de 'link_to' distant? Avez-vous déjà utilisé un cas d'utilisation? Ou simplement en faire un lien régulier et y ajouter un gestionnaire de clic? –

+0

Je n'aime pas le link_to distant mais c'est à vous de décider ... J'aime écrire et contrôler mes js, ce n'est pas si difficile à implémenter et vous n'êtes pas lié aux implémentations des rails ... – iwiznia

0

vous utiliseriez Ruby embarqué (comme vos modèles javascript sont des fichiers js.erb).

Si vous voulez différent jeux de javascript à exécuter en fonction de la réussite ou l'échec vous feriez quelque chose comme:

Controller:

def my_action 
    #some code 
    @success = true #or false 
    respond_to do |format| 
    format.js #you may need to add render :layout => false 
    format.html #html fallback 
    end 
end 

Puis, en vue my_action.js.erb:

<% if @success %> 
    //Some javascript for success 
<% else %> 
    //Some javascript for failure 
<% end %> 
+0

Eh bien, ce genre de travaux, mais pas exactement. Je veux dire, ça fait semblant; les deux sont techniquement réussis. Mais cela ne me laisse pas répondre au cycle de vie complet de la requête. Il y a un tas d'autres rappels (par exemple avant, chargement, complet, après) que je serais incapable d'utiliser. –

Questions connexes