Extending Rails-PrototypeHelper

RJS / JavaScript Generatoren machen das Programmieren von AJAX-Anwendungen mit Rails super einfach. Selber JavaScript programmieren ist zum Teil überflüssig und ich darf schönen, lesbaren Ruby Code schreiben. ;)

Folgender Code erweitert die Rails – JavaScriptGenerator Klasse um die Methoden „if“, „elsif“ und „else“. Die Methoden if und elsif erwarten einen String als Parameter, der als Condition an den JavaScript übergeben wird.
Ich weiß zwar nicht ob ich die Methoden ohne Probleme so nennen darf, aber es funktioniert auf jeden Fall. ;)


module DerBumi
module ActionView
module PrototypeHelper

# Executes the content of the block if +condition+ is true. Example
#
# page.if(„$(‚element‘).tagName == ‚INPUT'“) do
# page.visual_effect :fade, ‚element‘
# end
def if(condition)
record „if (#{condition}) {\n\n“
yield
record „}“
end
# creates the else if block corresponding to page.if()..
# only call this directly after page.if()…
def elsif(condition)

usw. …
Dowload rails_prototypehelper_ext.rb , in lib/ kopieren und im environment.rb – require „rails_prototypehelper_ext“ – einfügen.

danach kann ich z.B. folgendes machen:

render :update do |page|
page.if(„Element.visible(‚element‘)“) do
page.visual_effect :highlight, ‚element‘
end
end

3 comments so far

  1. Mario on

    Sehe ich das falsch oder wird an der stelle nicht MVC verletzt, *das* grundlegende Prinzip von Rails. Demnach sollte alles was die Darstellung leistet in die entsprechende Sektion abgetrennt sein. Hier werden aber visuelle Effekte im Controller ausgeführt.

  2. Michael on

    render :update funktioniert überall…
    du kannst z.B. auch in einem ganz normalen rhtml-view render :update do … end verwenden um dir von ruby javascript schreiben zu lassen.

    Bei einem Controller-Aufruf sollte natürlich komplexerer Code in ein eigenes .RJS Template ausgelagert werden.

  3. Mario on

    Okay, letzteres beantwortet die Frage. Das ein Befehl überall funktioniert heißt ja nicht, dass man diesen auch überall ausführen sollte. ;)


Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: