我现在和Backbone.js一起工作了一段时间,我现在遇到的其中一件事情是;有时您需要将服务器端逻辑放入.eco.jst模板
例如
如您所知,.eco由node.js解析,因此我无法在eco文件中调用ruby。我通过在头部基本创建“数据”对象来解决大多数这些问题。与此类似:
window.data = {
some_translation = "<%= t('cool') %>",
<%= "can_destoy_model = true," if can?('destroy', Model) %>
post_edit_link = "<%= post_path(@post) %>
}
除了这个笨重之外(这只是一个例子,通常这会更加强大,或者我将html5数据属性添加到某个dom元素),这很耗时,有时候你必须重新创建完整的业务逻辑,否则这将是一个rails中的oneliner(例如S3_file_uploader,需要编码的amazon policyfile和令牌)
您对此有何看法?我是否应该使用.eco(虽然我喜欢单独文件中的模板而不是查看视图)。如果我使用胡子或把手,我会使用服务器端逻辑吗?如果是这样,你会推荐哪种宝石?
答案 0 :(得分:1)
我对Backbone.js的体验有限,但我设法使用以下宝石设置了无逻辑模板的环境:
还有其他一些东西,甚至是我正在处理的迷你框架(你可以找到它here)
我选择使用Backbone构建Single Page Applications的方法。
基本上,haml_assets
gem为sprockets提供了解析.haml
文件的能力,这不是必需的,但我喜欢HAML语法。 handlebars_assets
gem提供了解析Handlebars模板的方法,包括服务器端和客户端。你可以在模板中使用Ruby代码,你可以解决你提到的i18n和路径方法问题。
我发现这些工具非常适合帮助DRY创建应用程序模板,它可以帮助您在模板中添加逻辑。例如,如果您使用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
@
这个例子非常原始和基本,但可以指向正确的方向。我希望它有所帮助!