2011-06-22 8 views
6

Estoy tratando de aprender backbone.js y estoy teniendo problemas para entender cómo enlazar modelos y leerlos después de una búsqueda. Este es mi código:Backbone.js colección de enlace a modelos después de una búsqueda usando ajax

$(function() { 
    var Bid = Backbone.Model.extend(); 

    var BidsList = Backbone.Collection.extend({ 
     model: Bid, 
     url: '/buyers/auction/latestBids?auctionId=26&latestBidId=0', 
    });   

    var BidsView = Backbone.View.extend({ 
     el: $('#bids'), 
     initialize: function() { 
      log('hi'); 
      _.bindAll(this, 'render'); 

      this.collection = new BidsList();     

      this.collection.fetch(); 
      this.render(); 
     }, 
     render: function() {      
      log(this.collection); 

      return this; 
     },    
    }); 

    var bidsView = new BidsView(); 

}); 

function log(m) { console.log(m); } 

Esto es lo que el servicio web JSON parece

{ 
    "AuctionState":3, 
    "ClosedOn":null,  
    "Bids":[ 
     { 
      "BidId":132,    
      "AuctionId":26  
     }, 
     { 
      "BidId":131, 
      "AuctionId":2   
     } 
    ] 
} 

¿Cómo habría Ato que la respuesta al modelo?

Respuesta

9

Debe anular el método parse() en su BidCollection para extraer las ofertas y presentarlas, y solo ellas, a la rutina add() de la colección. Puede hacer otras cosas con el método parse() para administrar el campo AuctionState.

También debe escuchar los eventos de "cambio" en su vista, por lo que la vista se actualiza automáticamente después de la búsqueda. No debería necesitar llamar a render() en su vista; debe vincular el evento de "cambio" del modelo a render(), luego buscar los datos y dejar que eso desencadene el procesamiento.

Como siempre, el código fuente del Backbone es altamente legible. Recomiendo aprender y entenderlo.

Por ejemplo:

var BidsList = Backbone.Collection.extend({ 
    model: Bid, 
    url: '/buyers/auction/latestBids?auctionId=26&latestBidId=0', 
    parse: function(response){ 
     return response.Bids; 
    } 
}); 
+1

Ejemplo código sería agradable. – Jason

Cuestiones relacionadas