Vues dans les vues? Comment générer des listes d'articles avec Backbone.js?
-
23-10-2019 - |
Question
Je suis en train de construire une liste d'articles (par exemple. Livres) et je voudrais permettre alors l'utilisateur de filtrer cette liste (par exemple. Par l'auteur). Je me attends à ce que chaque élément de la liste aurait son propre point de vue, et que la liste elle-même serait également une vue. Je ne peux pas sembler « voir » comment ceux-ci se emboîtent dans la structure centrale, cependant.
À l'heure actuelle, mon code est le suivant (café-script):
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}))
Ce que je voudrais comprendre comment créer chaque élément de <li>
dans la liste avec son propre point de vue + modèle afin que je puisse les filtrer par l'auteur.
La solution
Bien qu'il soit certainement possible d'écrire cette façon, les choses peuvent se contournés si vous avez des modèles vues de nidification modèles de nidification, ad infinitum ...
Au lieu de cela, pourquoi ne pas insérer vos vues livre dans la liste:
render: ->
$(this.el).html this.template()
bookHTML = for book in Books
(new BookView model: book).render().el
this.$('.book_list').append bookHTML