2

我已经使用 Backbone.js 工作了一段时间,我现在遇到的一件事是;有时您需要将服务器端逻辑放入 .eco.jst 模板中

例如

  • i18n 翻译(目前查看 i18n.js gem)
  • 没有硬编码的路径 (somemodel_path(somemodel))
  • 授权(例如,如果用户可以销毁此模型,则显示删除按钮)。Atm 我通过在填充的 json 中传入一些权限对象来解决这个问题。
  • 渲染像 simple_form 或 S3_file_uploader 之类的 html 帮助程序(atm 我通过在服务器端渲染它来解决这个问题,并将显示置于无)

如您所知,.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) %>
}

除了这很笨重(这只是一个例子,通常这会更有序,或者我向某个 dom 元素添加一个 html5 数据属性),这很耗时,有时你必须重新创建完整的业务逻辑,否则这将是 rails 中的 oneliner (以 S3_file_uploader 为例,它需要编码的亚马逊策略文件和令牌)

您对此有何看法?我是否应该不使用 .eco (尽管我喜欢单独文件中的模板而不是污染视图)。例如,如果我使用小胡子或车把,我是否能够使用服务器端逻辑?如果是,您会推荐哪种宝石?

4

1 回答 1

1

我在 Backbone.js 方面的经验是有限的,但我已经设法使用以下 gem 设置了一个带有无逻辑模板的环境:

还有一堆其他的东西,甚至是我目前正在开发的一个迷你框架(你可以在这里找到它)

我选择了这种方法来使用 Backbone构建单页应用程序。

基本上,haml_assetsgem 为sprocket提供了解析.haml文件的能力,这不是必需的,但我喜欢 HAML 语法。handlebars_assetsgem 提供了在服务器端和客户端解析 Handlebars 模板的方法。您可以在模板中使用 Ruby 代码,并且可以解决您提到的 i18n 和路径方法问题。

我发现这些工具非常适合帮助 DRY 应用程序的模板,它确实可以让您免于在模板中添加逻辑。例如,如果您使用 Backbone 视图来决定是否显示delete按钮,您可以将逻辑保留在 Backbone 视图中,并使用该逻辑来呈现正确的 Handlebars 模板(或部分模板)。

使用您的示例:

咖啡脚本:

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
    @

该示例非常原始和基本,但有望指向正确的方向。我希望它有帮助!

于 2013-03-06T23:48:17.687 回答