Question: I wanted to update the **rank** attribute of an existing model which I passed from another view. However, I get the error **Uncaught TypeError: Object # has no method 'set'**. 

In the initialize part of the view, I have :

```
this.collection = new tgcollection({model : this.options.model });

```

I define a function **updateModel** intended to update the attribute value as:

```
updateModel: function(){
    var val= $("#textbox_id").val();
console.log(val);   
console.log(JSON.stringify(this.options.model));
JSON.stringify(this.options.model);
this.options.model.set({"rank": val});
this.render();
//
},

```

Where am I going wrong?
I can see the value and the model with its previous attribute values in the console.

The model:

```
define(['jquery','underscore', 'backbone', 'deepmodel'], 
       function($,_, Backbone) {
         var model = Backbone.DeepModel.extend({

        // Default attributes for the model.
        defaults : {
            id: null,
                rank: null,

        },

        initialize: function(){
            _.bindAll(this,"update");
                    this.bind('change : cost', this.update);
        },

        update: function(){
            console.log(this.get("cost"));

        },
        // Remove this model from *localStorage*.
        clear : function() {
            this.destroy();
        },

    });
    return model;

```

});

Answer: 
Just do

```
this.model.set({"rank": val});

```

instead of

```
this.options.model.set({"rank": val});

```

The model within a view is accessed via this.model not this.options.model
I love a good mystery. Here is my best guess based on what I see. The problem is probably even further back. Where you call:

```
this.collection = new tgcollection({model : this.options.model });

```

`this.options.model` is probably not what you think it is. It would be helpful to see the view BEFORE this view that is instantiating and passing in this.options.model. BTW, with models and collections passed into the view, you can always shorten it to `this.model` Model, Collection and a handful of others are special in that they get attached directly to the View once passed in.

I'm assuming that in your `updateModel()` the following SEEM to work:

```
console.log(JSON.stringify(this.options.model));
JSON.stringify(this.options.model);

```

The error is coming up on the `set()`, not the lines above. So the assumption is that you passed in a model. Or did you? My wild guess is that what `this.options.model` actually is, is just a json object of your model. This might explain why you "see" the model in your console when you stringify it, but then Backbone protests when you call `set()` on it.

Instead of JSON.stringify to test this.options.model try just `console.log(this.options.model)`. Well, you don't have to test really. The fact that Backbone can't find `set()` on this object is a tell tale sign. If you're not seeing the complexity of a Backbone model in your console - it's not a model.

Also, for testing and debugging particularly models, I tend to use the `model.toJSON()` function as a quick check that it's a model and I'm seeing attributes I expect.

Let us know if you have more clues.