Was sind die besten Praktiken von Rails für Javascript Templates in resitiven / findigen Controllern?

8

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).

Die Probleme

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.

Drei andere Ansätze (keine wirklich zufriedenstellend)

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?

    
numbers1311407 15.06.2010, 13:52
quelle

2 Antworten

5

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.

    
yfeldblum 18.11.2010, 14:08
quelle
0

Nicht sicher, ob das für Sie funktioniert, aber ich würde Folgendes tun:

  1. Generieren Sie .js-Vorlagen mit ERB, diese Vorlagen sind statisch
    1. Die Vorlagen könnten Schnurrbart, jaml, jQuery-Vorlagen oder etwas anderes sein.
  2. Verwenden Sie eine Rake-Task, um alle Vorlagen zu generieren und statische .js-Dateien daraus zu erstellen.
  3. Fügen Sie diese statischen Dateien mit ein, sie werden vom Browser zwischengespeichert.
  4. Füllen Sie die Vorlagen mit json-Daten aus und fügen Sie den generierten HTML-Code hinzu.

Dies setzt voraus, dass die Vorlagen tatsächlich statisch sind, was von der jeweiligen Situation abhängt. Aber im Allgemeinen sollte das funktionieren.

    
sandstrom 18.11.2010 13:50
quelle