2017-05-15 23 views
1

私はデモ用にシンプルなSinatraアプリを開発しています。これを実装する方法があるかどうかは疑問です。Sinatra Webページの入力を適切に管理する方法

Rubyプログラムは、超簡単です(注:関連部分のみを以下に貼り付けられます):

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 

そして、私のHTMLはさらに簡単です(注:関連部分のみを以下に貼り付けられます):

 <em style="color: blue; font-style: italic"> Views count (<%= @pageviews %>):</em> 

     <form method="post" action="/increase"> 
      <input class='btn btn-primary' type='submit'> 
     </form> 

ホームページを読み込むと、カウンタが1増加します。[送信]ボタンをクリックすると、カウンタが2ずつ増加します(1つは送信するアクションが原因で、1つはホームページにリダイレクトされるためです)。それはいいです。それが私が望むものです。

しかし、Sinatraの仕組みのせいで、[送信]ボタンを押すと、基本的にページ全体がリロードされます。このような単純なページでは問題ありませんが、より複雑なアプリケーションの場合、ウェブページ全体をリロードするには操作が重すぎる可能性があります。確かにエレガントではありません。

私はSinatraをあまりにも伸ばそうとしているのですか(そして、私がAngularのようなものに切り替える必要がある場合)か、またはSinatraで使用できる方法があれば、メソッド+リダイレクトを呼び出すことなく/に?

ありがとうございました。

答えて

0

ページ全体をリロードしたくない場合は、iframeを使用するか(iframeを使用しないでください)、AJAXやWebSocketのようなJavaScriptのバックグラウンド通信メカニズムを使用します。 SinatraはAJAXリクエストを容易に処理できます。さて、SinatraがWebフレームワークのようにAJAXリクエストを実行するためのJavaScriptコードを生成したい場合(Angularのような)、Sinatraはそうしません。自分でJavaScriptを実装する必要があります。プロのヒント:jQueryを使用すれば、あなたの人生が楽になります。

関連する問題