2013-03-06 77 views
2

我已經工作了一段時間,現在與Backbone.js,我現在遇到的一件事是;有時候,你需要有服務器端邏輯到.eco.jst模板混合clientside JavaScript模板與rails邏輯骨幹.js

例如

  • 一個國際化的翻譯(目前看i18n.js寶石本)
  • 路徑的路線沒有硬編碼(somemodel_path(somemodel))
  • 授權(例如,如果用戶可以銷燬此模型,則顯示一個刪除按鈕)。 ATM我解決這個問題通過傳遞某些權利對象在被填充在JSON。
  • 渲染HTML幫助像simple_form或S3_file_uploader(ATM我解決這個問題有使其服務器端,裝上無顯示)

如您所知,.eco被node.js解析,所以我無法在生態文件中調用ruby。我通過在頭部基本創建一個「數據」對象來解決大多數這些問題。與此相似:

window.data = { 
    some_translation = "<%= t('cool') %>", 
    <%= "can_destoy_model = true," if can?('destroy', Model) %> 
    post_edit_link = "<%= post_path(@post) %> 
} 

除了這種笨重(這只是一個例子,通常這會比較ordened或者我添加了一個HTML5數據屬性一些DOM元素),這是費時,有時你必須重新創建完整的業務邏輯,否則將在軌道上的一個oneliner(例如S3_file_uploader,它需要編碼的亞馬遜策略文件和令牌)

你對此有什麼想法?我可能不應該使用.eco(儘管我喜歡獨立文件中的模板而不是污染視圖)。我能否使用服務器端邏輯,例如,如果我使用了鬍鬚或車把,並且您會推薦使用哪種gem?

回答

1

我與Backbone.js的經驗是一種有限的,但我已經使用下面的寶石設法建立一個環境,邏輯更少的模板:

和一堆其他的東西,即使是小型的框架我目前工作的(你可以找到它here

我選擇了使用Backbone構建Single Page Applications的這種方法。

基本上,haml_assets寶石提供sprockets能夠解析.haml文件,這是不需要的,但我喜歡HAML語法。 handlebars_assets gem提供了在服務器端和客戶端分析Handlebars模板的方法。您可以在模板中使用Ruby代碼,並且可以解決您提到的i18n和路徑方法問題。

我發現這些工具非常棒,可以幫助幹掉應用程序的模板,並且它可以幫助您避免在模板中添加邏輯。例如,如果您使用Backbone Views來決定是否顯示delete按鈕,則可以將邏輯保留在Backbone View中,並使用該邏輯來呈現正確的Handlebars模板(或部分)。

使用你的例子:

的CoffeeScript:

class ProjectShowView extends Backbone.View 
    template: (context) -> HandlebarsTemplates['projects/show'](context) 
    deleteButtonTemplate: (context) -> HandlebarsTemplates['projects/shared/delete_button'](context) 

    render: (canDelete = false) -> 
    @$el.html(@template(@model.toJSON())) 
    @$('.delete_button_container').append(@deleteButtonTemplate()) if canDelete 
    @ 

的例子是相當原始和基本的,但能在正確的方向指向希望。我希望它有幫助!

+0

如果你把它放在視圖中,你會如何定義canDelete?如果將它放入處理程序模板中(如果可能的話,可能使用偏分量),這樣會更好嗎?)。否則我仍然需要轉儲dom中的隨機json對象來處理權限。 – Jareish 2013-03-07 10:02:07

+0

這只是您可以做的事情的一個例子,您可以爲任何您想要的模型創建模型,即Session模型,它將Permission模型與所有與權限相關的數據一起存儲。這樣你就可以像'@ $('。delete_button_container')。append(@deleteButtonTemplate())一樣執行類似於App.Session.can_delete(「project」)的操作。 如何構造應用程序以填充權限數據(例如在頁面加載時填充)取決於您。不過,這種方法要求你在客戶端處理很多東西......否則,我很難擺脫模板中的邏輯 – sergelerator 2013-03-07 19:16:05