Completely remove attribute from Backbone.js model

backbone-model, backbone.js, javascript

Solution

The problem is that you're using the parameters for `unset` incorrectly. "Silent" should be a part of an options hash, not a separate parameter. This works:

model.unset("AttrName", { silent: true });

The reason for the strange behavior can be seen from the annotated source:

unset: function(attr, options) {
  (options || (options = {})).unset = true;
  return this.set(attr, null, options);
},

The `unset` method assumes that its `options` parameter is an object, and attempts to either create or modify it, then passes it on to the `set` method. If you pass a string instead, then the inadvertent effect of the code is to set the attribute to null, rather than to unset it.

Problem

I am trying to totally remove an attribute from a backbone model. The model is being sent to an API that isn't very flexible, and it will break if I send additional attributes over the ones I'm supposed to send, so I need to remove an attribute so it no longer exists. I tried `model.unset`, from this question, but when I print out the object the attribute I'm trying to remove is still listed, just with a value of null. I need the attribute to be completely gone. My basic structure is: ``` model.unset("AttrName", "silent"); ```

Original source

Related problems