Cal*_*ods 17
您可以通过在主.rb文件的顶部执行(在1.9.2中)来设置控制器的概念
Dir.glob("controllers/*.rb").each { |r| require_relative r }
Run Code Online (Sandbox Code Playgroud)
这将在一个名为controllers /的文件夹中的require_relative每个.rb文件
从那里你可以像以前在主.rb文件中那样实现正常路由.请看看Github 上的rstat.us.
编辑:Rstat.us已经走了rails3虽然仍然有用,你可能需要回到主分支上的许多提交,以找到它是如何使用的.
开箱即用的Sinatra没有标准的MVC框架.因此,虽然您不希望将所有内容保留在主视图文件中,但您在技术上也没有"控制器"来将其放入.将应用程序拆分为不同的功能可能是保持简单的最佳方法.将大部分功能分解为单独的类和小东西到辅助库中.
看看其他人如何做到这一点可能有所帮助,这篇文章应该有一些很好的例子供你研究:https://stackoverflow.com/questions/2075758/real-life-examples-of-sinatra-applications
如果MVC框架成为您真正认为需要的东西,请查看Padrino(http://padrinorb.com)
稍有相关的帖子:
在典型的MVC设置中,每个Sinatra路由都可以被视为自己的控制器.对于你的例子:
require 'sinatra'
require 'json'
get "/foo" do
# This might take many lines of excellent code to form your data
@data = some_complex_array_hash_combo
haml :foo
end
Run Code Online (Sandbox Code Playgroud)
然后在foo.haml:
:javascript
var data = #{@data.to_json};
Run Code Online (Sandbox Code Playgroud)