带有Eco模板的Backbone.js:如何在模板中包含模板?

时间:2011-09-13 09:33:55

标签: ruby-on-rails templates backbone.js coffeescript

是否可以在模板中包含模板?也许类似于ERB处理部分内容的方式?

不要试图以ERB的方式呈现嵌套模型,而是让Backbone.js处理这个问题。

注意,我使用的是coffeescript语法:

Projects.IndexView

template: JST["backbone/templates/projects/index"]

addAll: () ->
    @options.projects.each(@addOne)

addOne: (project) ->
    view = new Worktimer.Views.Projects.ProjectView({model : project})
    @$("#projects-table").append(view.render().el)

render: ->
    $(@el).html(@template(projects: @options.projects.toJSON() ))
    @addAll()

模型Project有一个名为sessions的嵌套集合:

Projects.ProjectView

template: JST["backbone/templates/projects/project"]

$(@el).html(@template(@model.toJSON() ))     
for s in @model.sessions.models
    v = new Worktimer.Views.ProjectSessions.ShowView(model: s)
    $(@el).find('.sessions').append(v.render().el)

ProjectSessions.ShowView

template: JST["backbone/templates/project_sessions/show"]

render: ->
    $(this.el).html(@template(@model.toJSON() ))

所以,最后我们有这样的嵌套模板:

  • 项目索引
    • 项目
      • 会话
      • 会话
      • 会话
      • 会话
    • 项目
      • 会话
    • 项目
      • 会话
      • 会话

3 个答案:

答案 0 :(得分:5)

这里有一个我用于脊椎的小帮手:

# Render Partials in ECO-Templates like in Rails-ERB
# 
# usefull to clean up structure in spine.js and other js-mvc´s like backbone 
# 
# usage:
#   <%- render_partial 'path/to/partial' %>  ..  will render ../spine-app/views/path/to/_partial.jst.eco
#   <%- render_partial 'path/to/partial', foo: 'bar' %>  ..  will render ../spine-app/views/path/to/_partial.jst.eco  ..  locals = @foo 
#
window.render_partial = ( path, options = {} ) ->
    # add the leading underscore (like rails-partials)
    path = path.split('/')
    path[ path.length - 1 ] = '_' + path[ path.length - 1 ]
    path = path.join('/')
    # render and return the partial if existing
    try
        JST["app/views/#{ path }"]( options )
    catch error
        # if App.Environment != 'production' then "<p class='error'>Sorry, there is no partial named '#{ path }'.</p>" else ''
        "<p class='error'>Sorry, there is no partial named '#{ path }'.</p>"

答案 1 :(得分:0)

我认为Eco不支持这一点。它更像是一个像Mustache这样的简单模板系统,而​​不是一个完整的ERB替代品。在Rails上,您可能会渲染一个Eco模板并将输出注入到ERB或Haml模板中。

对于Node.js开发,您可能需要查看CoffeeKup,它允许您在CoffeeScript中进行模板化并支持partials。

答案 2 :(得分:-1)

如果您在模板前添加.erb,则可以使用ERB处理器。

yourfile.js.coffee更改为yourfile.js.coffee.erb,然后您就可以将<%= %>代码添加到CoffeeScript模板中。