Zunächst zwei gängige (grundlegende) Ansätze:
%Vor%Das sind offensichtlich einfache Fälle, aber ich wollte illustrieren, worüber ich rede. Ich glaube, dass dies auch die Fälle sind, die vom Standard-Responder in Rails 3 erwartet werden (entweder die Standardvorlage mit Aktionsbenennung oder der Aufruf von _ # {format} für die Ressource).
Mit 1 haben Sie uneingeschränkte Flexibilität auf der Ansichtsseite, ohne sich um die Vorlage kümmern zu müssen, aber Sie müssen das DOM direkt über Javascript manipulieren. Sie verlieren den Zugriff auf Helfer, Teilprogramme usw.
Mit 2 haben Sie Partials und Helfer zur Verfügung, aber Sie sind an die eine Vorlage gebunden (standardmäßig mindestens). Alle Ihre Ansichten, die JS-Aufrufe an FoosController ausführen, verwenden die gleiche Vorlage, die nicht genau flexibel ist.
1.) Teilt / Helfer, die ich benötige, vorher in Javascript und setze sie danach in die Seite ein. Benutze String-Ersetzung, um sie an die zurückgegebenen Ergebnisse anzupassen (subging in Name, ID, etc).
2.) Setzen Sie View-Logik in die Vorlagen. Suchen Sie beispielsweise nach einem bestimmten DOM-Element und tun Sie eine Sache, wenn es existiert, eine andere, wenn es nicht existiert.
3.) Setzen Sie Logik in den Controller, um verschiedene Vorlagen zu rendern. Zum Beispiel, in einem polymorphen gehört, wo update für entweder Kommentare / foo oder posts / foo aufgerufen werden kann, Rendering comments / foos / update.js.erb versus posts / foos / update.js.erb.
Ich habe all diese benutzt (und wahrscheinlich andere, an die ich nicht denke). Oft in derselben App, was zu verwirrendem Code führt. Gibt es Best Practices für diese Art von Dingen? Es scheint, als wäre der Anwendungsfall genug, dass Sie Controller über Ajax-Aktionen aus verschiedenen Ansichten aufrufen und erwarten, dass verschiedene Dinge passieren (ohne langwierige Dinge wie das Entweichen und Ersetzen von Partials und Helfern auf der Client-Seite) / p>
Irgendwelche Gedanken?
Die beste Vorgehensweise besteht darin, dass Ihre Web-Benutzerschnittstelle die RESTful API verwendet. Das heißt, Sie können Ressourcen im JSON-Format mithilfe von JavaScript im Client abrufen und bereitstellen, so wie ein Drittanbieter mithilfe von RestClient
Ressourcen im JSON-Format abrufen und bereitstellen kann. Das bedeutet, dass Sie keine .rjs
- oder .js.erb
-Templates auf dem Server haben. Stattdessen können Sie Moustache- oder Handlebars- oder jQuery-Vorlagen sowie das eingebettete JavaScript-Code (oder statisch verknüpft mit) der ursprünglich gelieferten HTML-Seite verwenden der Webclient.
Natürlich ist der schnelle Ansatz, remote => true
zu verwenden und zum Server zu gehen und eine JavaScript-Code-Vorlage zu rendern, um JavaScript zu erzeugen, das auf dem Client ausgeführt wird, einfacher. Und es war eine ziemlich gute Übung für eine Weile. Aber wir brauchen jetzt JavaScript für ein Datenformat, und wir haben heute bessere Möglichkeiten, Daten im JSON-Format und Rendering-Vorlagen im Client zu ziehen.
Nicht sicher, ob das für Sie funktioniert, aber ich würde Folgendes tun:
Dies setzt voraus, dass die Vorlagen tatsächlich statisch sind, was von der jeweiligen Situation abhängt. Aber im Allgemeinen sollte das funktionieren.
Tags und Links javascript ruby-on-rails resources rest templates