2017-05-15 2 views
1

Ich arbeite an einer super einfachen Sinatra-App für Demozwecke und ich frage mich, ob es einen besseren Weg gibt, es zu implementieren.Wie man Eingänge in einer Sinatra-Webseite richtig verwaltet

Der Rubin Programm ist super einfach (Anmerkung: nur der relevante Teil unten eingefügt):

get '/' do 
    redis = Redis.new 
    redis = Redis.new(:host => settings.redis, :port => 6379) 
    redis.incr("pageviews") 

    @pageviews = redis.get("pageviews") 
    @hostname = Socket.gethostname 

    erb :webapp 
end #get/

post '/increase' do 
    redis = Redis.new 
    redis = Redis.new(:host => settings.redis, :port => 6379) 
    redis.incr("pageviews") 

    @pageviews = redis.get("pageviews") 
    @hostname = Socket.gethostname 
    redirect '/' 

end #post /increase 

Und dann meine html ist noch einfacher (Anmerkung: nur der relevante Teil ist unten eingefügt):

Wenn Sie die Startseite laden, wird der Zähler um 1 erhöht. Wenn Sie auf die Senden-Schaltfläche klicken, erhöht sich der Zähler um 2 (einer wegen der Aktion, die ich übergebe und einer wegen der Weiterleitung an die Homepage). Das ist gut. Das ist, was ich will.

Allerdings, wie Sinatra funktioniert, wenn ich den Submit-Button drücken, was passiert ist, dass im Grunde die gesamte Seite neu geladen wird. Für eine einfache Seite wie diese ist es in Ordnung, aber ich fürchte, dass für eine komplexere App das Neuladen der gesamten Webseite eine zu schwere Operation sein kann. Sicherlich nicht elegant.

Ich frage mich, ob ich versuche, Sinatra zu sehr zu strecken (und wenn ich diese Dinge tun möchte, sollte ich zu etwas wie Angular wechseln) oder wenn es Wege gibt, die ich in Sinatra anwenden kann, um das zu erhöhen. ohne eine Methode + Umleitung auf / aufrufen zu müssen?

Danke.

Antwort

0

Wenn Sie nicht die gesamte Seite neu laden möchten, haben Sie zwei Möglichkeiten: Verwenden Sie entweder iframes (bitte keine iframes verwenden), oder verwenden Sie einen Hintergrund-Kommunikationsmechanismus in JavaScript, wie AJAX oder WebSockets. Sinatra kann AJAX-Anfragen mit Leichtigkeit bearbeiten. Wenn Sie möchten, dass Sinatra den JavaScript-Code generiert, um die AJAX-Anfrage auszuführen, wie es einige Web-Frameworks tun (wie zum Beispiel Angular), dann nein, Sinatra macht das nicht. Sie müssen das JavaScript selbst implementieren. Profi-Tipp: Verwenden Sie jQuery dafür, es wird Ihnen das Leben leichter machen.

Verwandte Themen