Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

227
Vistas
¿La mejor práctica para guardar una colección completa?

Decir que tengo una Colección y he realizado cambios en muchos de sus Modelos. ¿Cuál es la mejor manera de guardar todos los cambios usando una sola solicitud HTTP?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Por lo general, los backends REST manejan la creación/actualización de una sola instancia. Debería cambiar eso para aceptar una matriz de objetos.

Dicho esto, en el lado del cliente, deberá ir directamente a la función Backbone.sync

 Backbone.sync = function(method, model, options)

En este caso, su modelo debe ser una matriz de modelo. El método debe ser "crear" o "guardar" y las opciones toman el mismo tipo de opciones que una llamada jQuery ajax (error, éxito, etc.)

over 4 years ago · Santiago Trujillo Denunciar

0

Voy a hacer lo incorrecto aquí y citaré Wikipedia con respecto a las prácticas RESTful adecuadas : un PUT a example.com/resources debería reemplazar la colección completa con otra colección. En base a esto, cuando tuvimos que admitir la edición de varios elementos simultáneamente, redactamos este contrato.

  1. El cliente envía {"resources": [{resource1},{resource2}]}
  2. El servidor reemplaza toda la colección con la nueva información del cliente y devuelve la información después de que se haya conservado: {"resources": [{"id":1,...},{"id":2,...}]}

Escribimos la mitad del contrato del servidor en Rails, pero aquí está la mitad del cliente (¡en CoffeeScript, lo siento!):

 class ChildElementCollection extends Backbone.Collection initialize: -> @bind 'add', (model) -> model.set('parent_id', @parent.id) url: -> "#{@parent.url()}/resources" # let's say that @parent.url() == '/parent/1' save: -> response = Backbone.sync('update', @, url: @url(), contentType: 'application/json', data: JSON.stringify(children: @toJSON())) response.done (models) => @reset models.resources

Pensé que esto era mucho más fácil de implementar que anular Backbone.sync. Un comentario sobre el código, nuestras colecciones siempre fueron objetos secundarios, lo que debería explicar por qué el código establece un "parent_id" cada vez que se agrega un objeto a la colección, y cómo la raíz de la URL es la URL principal. Si tiene colecciones de nivel raíz que desea modificar, simplemente elimine el negocio @parent .

over 4 years ago · Santiago Trujillo Denunciar

0

Debería extender Backbone.Collection , dándole un método save() que verificaría cada uno de sus modelos hasChanged() .

Luego debería llamar a Backbone.sync , que probablemente tendrá que extender un poco a una función de sincronización personalizada. Si utiliza una función Backbone.sync personalizada, asegúrese de configurarla en su colección.

 var CollectionSync = function(method, model, [options]) { // do similar things to Backbone.sync } var MyCollection = Backbone.Collection.extend({ sync: CollectionSync, model: MyModel, getChanged: function() { // return a list of models that have changed by checking hasChanged() }, save: function(attributes, options) { // do similar things as Model.save } });

Aquí hay un enfoque diferente (usando un modelo para representar la colección): "¿Cómo" guardar una colección completa en Backbone.js - Backbone.sync o jQuery.ajax?

También me gusta https://stackoverflow.com/a/7986982/137067

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda