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.

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top