2011-01-23 2 views
12

J'essaye de construire une liste d'articles (par exemple des livres) et je voudrais permettre alors à l'utilisateur de filtrer cette liste (par exemple par l'auteur). Je m'attendrais à ce que chaque élément de la liste ait sa propre vue, et que la liste elle-même ait aussi une vue. Cependant, je n'arrive pas à "voir" comment ils s'emboîtent dans Backbone.Vues dans les vues? Comment générer des listes d'éléments avec Backbone.js?

Actuellement, 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 <li> dans la liste avec son propre point de vue + modèle afin que je peux filtrez-les par auteur.

Répondre

11

Bien qu'il soit certainement possible d'écrire cette façon, les choses peuvent obtenir alambiquée 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 
+0

Merci! Comment utiliser les méthodes 'filter' d'Underscore pour filtrer les livres par auteur? –

+0

En outre, pourriez-vous donner un exemple de la façon dont on écrirait un modèle imbriquant une vue qui imbrique un modèle? Juste au cas où l'on voulait réellement réaliser une telle structure - plus à des fins d'apprentissage que d'utilisation réelle. :) –

+0

<%= renderTemplate(moreData) %>
jashkenas

Questions connexes