退房rabl寶石。它允許你定製你的json響應的程度遠高於常規的to_json
將允許的程度。
這裏的設置,你需要提供JSON的負荷了前一個項目一個基本途徑:
首先,設置你的控制器來拉在頁面加載數據,examlpe localhost:3000/home
看起來在家裏控制器指數:
class HomeController < ApplicationController
def index
@user = current_user
render 'user.json' # this line is not actually required most of the time when using backbone and proper ajax/json requests
end
end
接下來,建立一個rabl
模板,這需要一個視圖或局部的地方,並返回JSON到客戶端。實際上,我將使用一個部分,使加載到家庭/ index.html的瀏覽好,易於:
# views/home/_user.json.rabl
object @user
attributes :id, :first_name, :last_name, :birthdate, :gender, :nickname, :email
node(:avatar_thumb_url) { |u| u.avatar.url :thumb }
node(:roles) { |u| u.roles }
node(:name) { |u| "#{u.first_name} #{u.last_name}".strip }
node(:errors) { |u| u.errors.to_hash if u.errors.present? }
child :awesome_calendars => :calendars do
attributes :id, :date, :description
child :events do
attributes :title, :description
end
end
這是一些比較花哨Rabl的,將提供一堆JSON的,包括相關的一系列記錄,全部在一個JSON對象中。
在加載了骨幹您的HTML視圖,您需要將控制器的對象傳遞給部分:
# views/home/index.html.erb
<script type='text/javascript'>
$(function() {
window.router = new Backbonedemo.Routers.CalendarsRouter(<%= render('user.json.rabl', user: @user).html_safe -%>);
Backbone.history.start();
});
</script>
要回顧一下:
- 控制器再現定期
html.erb
觀點(即啓動一個up backbone)
- 該視圖也呈現部分 - 這部分是
rabl
模板,嚴格返回JSON
- 骨幹採用了這個JSON並用它做任何你想做的事情。
這樣做的好處是,你可以爲你的任何控制器動作設置json.rabl響應,並讓它們返回各種json的東西,所有的控件都可以輕鬆控制。我上面做的事情是「困難」的部分,您希望將來自多個表格的內容加載到您的第一個頁面加載中的單個JSON調用 - 避免多個AJAX /主幹提取請求。
有意義嗎?我希望如此...:/如果有什麼不清楚的話,請告訴我。