回答
每个Sinatra的路线可以被认为是典型的MVC开发它自己的控制器etup。对于你的例子:
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
然后在foo.haml
:
:javascript
var data = #{@data.to_json};
开箱即用的Sinatra没有标准的MVC框架。因此,虽然您不希望将所有内容都保留在主视图文件中,但您在技术上也没有“控制器”来放置它。将应用程序拆分为不同的功能可能是最简单的方法。将大部分功能划分为独立的类和小型事物,并将其分配到助手库中。在别人是怎么做这可能帮助了
来看,这个职位应该有一些不错的例子,你学习:https://stackoverflow.com/questions/2075758/real-life-examples-of-sinatra-applications
如果一个MVC框架变成东西,你真的认为你需要,看看Padrino(http://padrinorb.com )
略相关帖子:
您可以通过(在1.9.2),这在你的主要的.rb文件的顶部设置控制器的想法
Dir.glob("controllers/*.rb").each { |r| require_relative r }
这将require_relative每个.RB文件中的一个文件夹中称为控制器/
从那里你可以实现正常的路由,就像你以前在主.rb文件中做的那样。请在Github上查看rstat.us。
编辑:Rstat.us已经走了rails3,虽然仍然有帮助,但您可能需要回去主分支上的许多提交以查找它是如何使用的。
这个评论值得更多的业力。很有帮助。谢谢! – 2011-09-07 04:58:45
@ j33r谢谢!非常感激。 – 2011-09-08 14:54:37
@CaleyWoods:感谢你的提及rstat.us
对于那些谁正在寻找西纳特拉的版本,这里是一个西纳特拉的链接提交: https://github.com/hotsh/rstat.us/tree/00b27505681d80b3943fd9b9e9791f664a04cf39
(所以你不”不必拖过提交历史记录;-))
和https://github.com/hotsh/rstat.us/blob/00b27505681d80b3943fd9b9e9791f664a04cf39/rstatus.rb#L79 L#79显示允许您使用控制器/文件夹的Dir.glob语句。 – 2012-09-18 15:05:22
如果您有从ApplicationController继承的控制器,这仅用于继承。祝你好运! 如果您的应用程序使用config.ru文件,那么这可能会有所帮助。
require 'active_support'
require 'sinatra/base'
APP_ROOT = Pathname.new(File.expand_path('../', __FILE__))
# We have to do this in case we have controllers that inherit from each other.
Dir[APP_ROOT.join('app', 'controllers', '*.rb')].each do |controller_file|
filename = File.basename(controller_file).gsub('.rb', '')
autoload ActiveSupport::Inflector.camelize(filename), controller_file
end
这个假设你把那个代码放到你的config.ru中,但是你也可以把你的应用程序文件也放进去,并且一定要调整目录结构。
- 1. Java Swing中的控制器是什么?
- 2. WCSF中的控制器是什么?
- 3. Sinatra和“控制器”行为
- 4. 控制器的工作是什么?
- 5. GRASP的控制器到底是什么?
- 6. 什么时候Zend_Controller_Request_Http不是控制器
- 7. 什么是@ Html.IsSelected(控制器:“仪表板”)?
- 8. Yii什么是“控制器视图”?
- 9. 什么是根视图控制器
- 10. 什么是对游戏控制器
- 11. 调试(了解)什么是控制器
- 12. 什么是Bash中的流量控制?
- 13. 什么是腹胀控制
- 14. 这是什么控制?
- 15. 这是什么iOS控制?
- 16. 什么是控制对象
- 17. 什么是Rails application.html.erb的Sinatra Equivelant?
- 18. Rails中新控制器操作的目的是什么?
- 19. 什么是C++中的WinXP控制台光标控制字符?
- 20. 什么是EmberJS中的控制器和组件?
- 21. 什么是控制器中的Up和Down功能?
- 22. 在Rails 5的控制器中使用什么而不是after_commit?
- 23. 什么是简单编辑器在Java中的最佳控制
- 24. 在AngularJS中定义控制器的正确方法是什么?
- 25. MVC中控制器的工作是什么?
- 26. 什么是春季控制器中的ServletWrappingController
- 27. 什么是Node.js相当于ASP.NET MVC中的控制器?
- 28. 在PHP中实现控制器的最佳方式是什么?
- 29. 什么是Laravel中的路由和控制器?
- 30. 控制器中软件看门狗的用途是什么?
为什么我必须使用'@ data'而不是'data'? – Radek 2011-05-04 01:25:14
@Radek由于实例变量由Sinatra'haml' helper提供给Haml模板,但本地变量不可用。 – Phrogz 2011-05-04 01:39:30