回答
每個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. WCSF中的控制器是什麼?
- 2. Java Swing中的控制器是什麼?
- 3. Sinatra和「控制器」行爲
- 4. 什麼是Smalltalk的sinatra?
- 5. 什麼是持有我的控制器?
- 6. 控制器的工作是什麼?
- 7. 什麼是JsonResult的MVC控制器
- 8. GRASP的控制器到底是什麼?
- 9. 什麼是輸入的asp.net控制器
- 10. 什麼是「頁面控制器」和「頁面視圖控制器」?
- 11. 這是什麼iOS控制器?
- 12. 什麼時候Zend_Controller_Request_Http不是控制器
- 13. 是什麼在爾康控制器
- 14. 調試(瞭解)什麼是控制器
- 15. 什麼是根視圖控制器
- 16. 什麼是對遊戲控制器
- 17. Yii什麼是「控制器視圖」?
- 18. 什麼是@ Html.IsSelected(控制器:「儀表板」)?
- 19. 控制器的作用是什麼,AngularJS中$ scope的作用是什麼?
- 20. 控制機制反轉中的Unity容器是什麼?
- 21. 什麼是接收器控制寄存器的中斷級別
- 22. 什麼是C中的vuint,爲什麼在我的微控制器中?
- 23. 這是什麼iOS控制?
- 24. 什麼是腹脹控制
- 25. 這是什麼控制?
- 26. 什麼是控制對象
- 27. 什麼是Rails application.html.erb的Sinatra Equivelant?
- 28. 「顯式控制評估器」中「顯式控制」的含義是什麼?
- 29. Rails中新控制器操作的目的是什麼?
- 30. 什麼是Opencart的類別控制器文件中的sort_order-ASC?
爲什麼我必須使用'@ data'而不是'data'? – Radek 2011-05-04 01:25:14
@Radek由於實例變量由Sinatra'haml' helper提供給Haml模板,但本地變量不可用。 – Phrogz 2011-05-04 01:39:30