Vistas dentro de las vistas? ¿Cómo generar listas de elementos con backbone.js?
-
23-10-2019 - |
Pregunta
Estoy tratando de construir una lista de elementos (por ejemplo, libros) y luego me gustaría permitir que el usuario filtre esta lista (por ejemplo, por autor). Esperaría que cada elemento de la lista tenga su propia vista, y que la lista en sí también tenga una vista. Sin embargo, parece que no puedo "ver" cómo se ajustan en la columna vertebral.
Actualmente, mi código es el siguiente (secuencia de café):
class Book extends Backbone.Model
class BookList extends Backbone.Collection
model: Book
url: "/library/books.json"
books = new BookList
class BookListView extends Backbone.View
initialize: ->
@template = _.template('''
<ul>
<% books.each(function(book){ %>
<li><%= book.get('title') %>, <%= book.get('author') %></li>
<% }); %>
</ul>
''')
@render
render: ->
template = @template
books.fetch success: -> jQuery("#books").html(template({'books': books}))
Lo que me gustaría entender es cómo crear cada <li>
Elemento en la lista con su propia vista+plantilla para que pueda filtrarlos por autor.
Solución
Si bien es posible escribirlo de esa manera, las cosas pueden ser complicadas si tiene plantillas que anidan plantillas de anidación, ad infinitum ...
En su lugar, ¿por qué no insertar las vistas de su libro en la lista:
render: ->
$(this.el).html this.template()
bookHTML = for book in Books
(new BookView model: book).render().el
this.$('.book_list').append bookHTML