Desactivar todos los attributes de la networking troncal de una vez

Tengo una pregunta sobre Backbone, ¿cómo es posible configurar todos los attributes de un model para vaciar?

unsetmodel.unset(attribute, [options]) Remove an attribute by deleting it from the internal attributes hash. Fires a "change" event unless silent is passed as an option. 

Pero esto solo sirve para deshacer las properties individuales, una por una.

Alguien una idea?

Gretz,

Desde el sitio Backbone:

clearmodel.clear ([opciones])

Elimina todos los attributes del model, incluido el atributo id. Lanza un evento de "cambio" a less que se pase silencioso como una opción.

Entonces yo haría algo como:

 myModel.clear(); 

Si desea conservar los attributes, ¿por qué no repetirlos y configurarlos manualmente?

 $.each(this.model.attributes, function(index, value){ // set them manually to undefined }); 

Sé que esta es una publicación anterior, pero recientemente me encontré con un problema similar, principalmente, que si lo hace uno por uno, obtiene múltiples events de change , con el model en un estado intermedio para cada uno. Para permitir que esto suceda con los events de cambio apropiados que se disparan después, deberá desarmarlos uno a uno en silencio, luego disparar manualmente los events de cambio para cada uno después de los desajustes. Sin embargo, si observa el código Backbone, verá que el método unset es realmente solo una llamada a set , con {unset:true} en las opciones. Entonces deberías poder hacer esto:

 model.set({ attr1: undefined, attr2: undefined, attr3: undefined }, { unset: true }) 

No lo he probado en la práctica, pero definitivamente debería funcionar en teoría. Obtendrá una serie de events de change para cada atributo, después de que se hayan completado todos los sets. Este enfoque está yendo un poco fuera de la ruta recomendada, ya que usa una lógica no expuesta de la fuente Backbone, pero dado que este código en particular no ha cambiado en unos pocos años (y realmente parecía ser compatible como una opción set antes de eso), debe ser seguro de usar y continuar usando.

No hay un método incorporado para establecer todas las properties indefinidas, mientras se mantienen las keys de attributes . La buena noticia es que puedes build fácilmente uno tú mismo con un subrayado de una línea:

 Backbone.Model.prototype.clearValues = function(options) { this.set(_.object(_.keys(this.attributes), []), options); } 

Todos los models tendrán un método clearValues :

 var model = new Model({ id:1, foo:'foo', bar:'bar' }); model.clearValues(); console.log(model.toJSON()); //-> {id: undefined, foo: undefined, bar: undefined}