2011-09-13 21 views
5

¿Es posible incluir una plantilla dentro de una plantilla? Tal vez algo similar a la forma en que ERB maneja parciales?Backbone.js con plantillas Eco: ¿cómo incluir una plantilla dentro de una plantilla?

En lugar de intentar renderizar modelos anidados de una manera como ERB, es mejor dejar que Backbone.js se encargue de esto.

Nota, estoy usando la sintaxis 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() 

el modelo de proyecto ha llamado una colección anidada sesiones:

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())) 

así, al final nos hemos anidado plantillas de la siguiente manera:

  • Proyectos Índice
    • Proyecto
      • Sesión
      • Sesión
      • Sesión
      • Sesión
    • Proyecto
      • Sesión
    • Proyecto
      • Sesión
      • Sesión

Respuesta

-1

Si prefija la plantilla con .erb, puede usar el procesador ERB.

Cambie yourfile.js.coffee a yourfile.js.coffee.erb, luego podrá agregar etiquetas <%= %> a su plantilla CoffeeScript.

+0

esto sería dentro de Eco, por lo que sugeriría hacer file.jst.eco.erb? – miketucker

+0

Cuantas más extensiones agregue, más procesadores serán utilizados. –

+0

Además, dado que ECO y ERB usan '<%= %>', ¡ERB devoraría todas las interpolaciones antes de que ECO lo haga! :) – micapam

0

No creo que Eco apoye esto. Está pensado más como un sistema de plantillas simple como Moustache que como un reemplazo de ERB completo. En Rails, probablemente represente una plantilla Eco e inyecte la salida en una plantilla ERB o Haml.

Para el desarrollo de Node.js, es posible que desee echar un vistazo a CoffeeKup, que le permite aplicar sus plantillas en CoffeeScript y admite parciales.

+0

Gracias, estoy usando Eco con Backbone y Rails 3.1. Terminé yendo con el uso de la red troncal para inyectar plantillas individuales dentro de los padres. – miketucker

5

aquí un pequeño ayudante que utilizo para la columna vertebral:

# 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>" 
Cuestiones relacionadas