2012-01-07 23 views
6

Estoy desarrollando una aplicación backbone, que hace que la solicitud de dominio entre dominios sea amplia. se requiere la estructura de datos anidada en la solicitud, en la solicitud de rizo tengo esa estructura:Modelo de backbone: estructura de datos anidados

{ 
    "site_id": 1, 
    "post": { 
     "site_id": 1, 
     "provider_id": 1, 
     "provider_post_id":1, 
     "created_ts": "12.12.12", 
     "post": { 
      "header": "text", 
      "caption": "text", 
      "image": "http://...jpg" 
     } 
    } 
} 

En el modelo no he anidado estructura y esto es bastante cómodo, porque uso image campo de modelo en la view (DOM creación de elementos).

¿Cuál es la forma correcta de enviar datos anidados al servidor desde la aplicación Backbone?

Modelo:

var WraperModel = Backbone.Model.extend({ 
    url: 'http://mydomain/core/api/v1/bookmarklet_post/? callback=?', 
    defaults: { 
     site_id: 1, // shouldn't be hardcoded 
     type:"type", site_id:2, provider_id: 2, provider_post_id: 2, created_ts:2, 
     header : '', 
     caption: '', 
     image: '' 
    }, 
}); 

La parte de vista, que utilizan image propiedad del modelo:

drawItem: function (model) { 
    var inst = new ImageView({model: model, tagName: 'li',  className:'images-item'}).render(); 
    this.imagesWrapper.append(inst.el); 
}, 
getImages: function() { 
    var images = doc.getElementsByTagName('img'), 
     view = this; 
    _.each(images, function (image) { 
     image.offsetHeight > 75 
     && image.offsetWidth > 75 && 
     view.collection.add({image: image.src}); 
    }); 
}, 

La parte de otro punto de vista, que envían datos al servidor.

sendTo: function(){ 
    var that = this, 
    data = {saving: true}; 

    $('#add-header').val() && (data.header = $('#add-header').val()); 
    $('#add-description').val() && (data.caption = $('#add-description').val()); 
    this.model.set(data); 
    this.model.save(); 
} 

Respuesta

1

el primer parámetro que se pasa en save es un hash de los atributos que se van a pasar a lo largo de su reserva.

En su función sendTo simplemente construya un objeto con los datos de su modelo y cualquier valor de formulario adicional de una manera que el servidor espera. De forma predeterminada, cuando un guardado es exitoso, los datos de la respuesta se pasarán a través del método de análisis y volverán a establecerse en el modelo.

var myData = { 
    //create nested object for the server 
}; 

this.model.save(myData); 
+0

¡Buena solución! Me procesaron los datos en el lado del servidor, en este momento. – I159

Cuestiones relacionadas