Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

224
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda