As stated in the comments, the problem here begins here:
this.addUserModel = new UsersCollection(); this.addUserView = new AddUserView({model:this.addUserModel});
and ends here:
saveUser:function(){ alert('saveUser'); this.model.set({
By going through the collection instead of the model, you create confusion, and as a result, in the saveUser function saveUser you try to call the Backbone.Model ( set ) method on the Backbone.Model instance.
Note. Starting with version 1.0.0, Backbone.Collection now has a set method. In previous versions, such as the one used by the question author, this method was instead called update .
There are several steps you can take to clarify this code. First, I would rename your models and collection classes so that it is clear that the model is the only form, and the collection is the plural form:
window.Users => window.User
window.UsersCollection => window.Users
Then I will create a new User model instead of the Users collection and pass it to your view:
this.addUserModel = new User(); this.addUserView = new AddUserView({model:this.addUserModel});
Finally, I will remove the following lines:
if(this.model.isNew()){ this.model.create(this.model); }
Firstly, the model will always be new (since you just created it before transferring it), but more importantly, you do not need to call the Collection create method, because this method creates a new model when you already have one. Perhaps you should add the following instead:
this.model.save();
if you intend to save the model on your server.
Since you already specified urlRoot for the model, this should be all you need to create a new model, pass it to your view, add your attributes based on DOM elements to your view, and finally save your server attributes to this model.