2010-02-11 8 views
5

In den Release Notes für Rails 3.0 beta heißt es:Rails 3.0 beta & JS Helfer mit jQuery

"Dezente JavaScript Helfer mit Treibern für Prototype, jQuery"

Wie gründe ich Rails 3, um jQuery dann zu verwenden? Es lädt weiterhin alle Prototypbibliotheken standardmäßig.

nahm ich dies bedeuten, dass Rails 3 ähnlich dem jRails Plugin in Funktionalität gebaut hat, aber ich bin Missverständnis vielleicht :)

Auch als Bonus-Frage, wenn ich Prototype mit bin, ist es eine Möglichkeit, um Rails zu veranlassen, die verkleinerten Versionen zu laden, und noch besser eine einzelne verkettete JS-Datei, um HTTP-Anfragen zu reduzieren?

Danke.

Antwort

0

Ich weiß nicht über Rails 3, aber ich werde versuchen, Bonus Frage zu beantworten.

Sie können setzen, was Sie wollen in öffentlichen/Javascript-Verzeichnis. Standardmäßig werden Dateien geladen: prototype.js, effects.js, dragdrop.js und controls.js (read more). Wenn Sie alle js-Dateien komprimieren und in einer Datei senden möchten, können Sie diese plugin verwenden.

Natürlich funktioniert es nicht für dynamisch generierte js-Dateien.

+0

Ah praktisch, danke :) – firecall

0

ich auch auf, dass die Arbeit mit dem Versuch, meine alte Ajax mit Schienen 3.

Von zu konvertieren, was ich sagen kann, bewegt sie sich auf eine Struktur, die eine data-remote=true fügt hinzu und wenn Sie hinzufügen :remote => true um so etwas wie link_to welches in Rail 3 link_to_remote ersetzen soll, also gibt es keine Onclick-Methoden mehr, die Ajax-Methoden aufrufen.

Also, wie funktioniert Ajax in Rails 3, dann? Nun, Sie sollen JavaScript-Methoden haben, die aufpassen, wenn Sie auf Links klicken, die eine Eigenschaft von data-remote=true haben und etwas damit machen, aber nicht wirklich in Rails aufnehmen (von dem, was ich sagen kann), es ist seit Ihnen agnostisch kann diese Methoden schreiben, um auf Klicks im Prototyp zu achten, jquery, schreibe sie selbst, oder was auch immer es da draußen gibt.

ich einige Javascript auf Github gefunden zu das wird sehen für diese Ereignisse zu beginnen:

In prototype

In jQuery

Ich denke, um Jquery statt Prototyp tatsächlich zu laden, Sie Ich werde es nur auf public/javascripts herunterladen und manuell jquery angeben, javascript_include_tag :all verwenden oder javascript_include_tag überschreiben (nicht empfohlen)

+0

Ich habe mich geirrt über Rails nicht eines der UJS-Skripte .. Es ist in der Öffentlichkeit/javascripts/rails.js Ich denke, ich habe es gerade verpasst. –

1

Unobtrusive JS bezieht sich nicht auf die PrototypeHelper-Methoden, sondern auf Remote-Formulare und Links und dergleichen. Das Konzept ist, dass Sie :remote => true in Ihrem form_for oder was auch immer Helfer Methoden unterstützen, und dann wird ein Treiber namens rails.js für diese Fernbedienungen suchen und die submit oder click Ereignisse abfangen und sie über xhr senden.

Um jquery zu verwenden, müssen Sie nur den Prototyp-ujs-Treiber (der mit Rails ausgeliefert wird) durch den jquery-ujs-Treiber ersetzen, der kurz vor der Betaversion von rails 3 in einen eigenen Repo extrahiert wurde. Sie können es here finden.

2

Wenn Sie eine Rails 3 app erstellen, geben Sie einfach als auch entlang der -J param:

$ rails app_name -J 

Diese Über einschließlich der Prototype-Bibliotheken überspringen wird. Jetzt müssen Sie nur die letzte jquery.js Datei in das Verzeichnis public/javascripts löschen. Sobald Sie das tun, benötigen Sie auch die jQuery-Version der Datei rails.js. Sie können das hier:

http://github.com/rails/jquery-ujs/blob/master/src/rails.js

EDIT: Sie müssen diese Dateien in der Spitze Ihrer Layouts enthalten die Funktionalität zu gewinnen. Sie können dies tun, indem Sie:

<%= javascript_include_tag "jquery", "rails" %> 

Hoffe, das hilft!

+0

Yup, das ist die Antwort, die ich gesucht habe :) Danke. Ich glaube, ich würde davon ausgehen, dass es dafür Config und auch eine Konfiguration geben würde, um veraltete Versionen für die Bereitstellung zu verwenden. Scheint so, als ob dies Standard ist und etwas, was Rails als Standard tun sollte. Warum enthält es zunächst einen nicht-minimierten Prototyp? – firecall

+0

Sie können mein Plugin verwenden, um genau das zu tun: http://github.com/voxxit/assemblage –

1

Check out Google Closure

Es können mehrere Javascript-Dateien in einer einzigen komprimierten Datei js drehen. Es kann sogar herausfinden, welche Teile der Bibliothek Sie nicht verwenden und entfernen Sie sie auch.

+0

Ja, ich wusste davon. Ich verwende bereits einen manuellen Workflow, der YUI Compressor und dann CAT über ein Shell-Skript ausführt. Aber ich habe mich wirklich gefragt, ob es einen eingebauten Rails-Weg oder etwas gibt, um die HTTP-Anfragen zu reduzieren. Scheint sinnlos, so viele nichtminimierte Versionen als Standard einzuschließen: – firecall