如何在Sinatra网页中正确管理输入

时间:2017-05-15 16:48:39

标签: javascript sinatra

我正在开发一个超级简单的Sinatra应用程序用于演示目的,我想知道是否有更好的方法来实现它。

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(一个因为我提交的操作而另一个因为重定向到主页)。没关系。这就是我想要的。

然而,由于Sinatra的工作原理,当我按下Submit按钮时会发生什么,基本上整个页面都会重新加载。对于像这样的简单页面它很好,但我担心对于更复杂的应用程序重新加载整个网页可能是一个太沉重的操作。当然不优雅。

我想知道我是否想要过多地伸展Sinatra(如果我想做那些我应该转向Angular之类的东西)或者我是否有办法在Sinatra中使用它来“增加”而不用必须调用方法+重定向到/

感谢。

1 个答案:

答案 0 :(得分:0)

如果您不想重新加载整个页面,则有两种选择:使用iframe(请不要使用iframe),或使用JavaScript中的后台通信机制,如AJAX或WebSockets。 Sinatra可以轻松处理AJAX请求。现在,如果你想让Sinatra像一些web框架一样生成JavaScript代码来执行AJAX请求(比如Angular),那么不,Sinatra不会这样做。您必须自己实现JavaScript。专业提示:使用jQuery,它会让你的生活更轻松。