【问题标题】:How to properly manage inputs in a Sinatra web page如何正确管理 Sinatra 网页中的输入
【发布时间】:2017-10-14 13:21:21
【问题描述】:

我正在为演示目的开发一个超级简单的 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 的工作方式,当我按下提交按钮时,基本上整个页面都会重新加载。对于这样一个简单的页面,这很好,但我担心对于更复杂的应用程序,重新加载整个网页可能是一个太繁重的操作。当然不优雅。

我想知道我是否试图过多地拉伸 Sinatra(如果我想做这些事情,我应该切换到 Angular 之类的东西),或者我是否可以在 Sinatra 中使用一些方法来“增加”而不用必须调用方法+重定向到/

谢谢。

【问题讨论】:

    标签: javascript sinatra


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-19
      • 2020-01-08
      • 1970-01-01
      • 2021-01-26
      • 1970-01-01
      • 2018-02-07
      • 1970-01-01
      相关资源
      最近更新 更多