Search code examples
javascriptbackbone.jslocal-storagebackbone-local-storage

Backbone localStorage Adapter: Uncaught Error: A "url" property or function must be specified


I've gone over the other posts on the same topic and perhaps I'm missing something in my own code but it seems to me things should be working. I've never worked with localStorage and backbone and seem to be missing something here. Any thoughts are greatly appreciated!

my instances:

var Address = {
  run: function() {
    this.router = new AddressRouter();
    this.contactscollection = new AddressCollection();
    this.addContact = new AddressAddView();
    this.listView = new AddressListView();
    Backbone.history.start();
  }
};

my collection:

var AddressCollection = Backbone.Collection.extend({
  model: AddressModel,
  localstorage: new Store('backbone-addressbook')
});

my model:

var AddressModel = Backbone.Model.extend({
  defaults: {
    id: '',
    name: '',
    email: ''
  }
});

and my view:

var AddressAddView = Backbone.View.extend({
el: '#content',
template: _.template($('#addContactTemplate').html()),
events: { 'submit form#addContactForm': 'createContact'},

createContact: function(){
    Address.contactscollection.create(this.newAttributes());
    this.save();
    this.input.val('');
},

newAttributes: function() {
    return {
        id: $('#id').val(),
        name: $('#name').val(),
        email: $('#email').val()
    }
},

initialize: function() {
    _.bindAll(this, 'addContactPage','render');
},

addContactPage: function(id) {
    var contact = {},
    model = Address.contactscollection.get(id);
    if (id !== undefined && model !== undefined) {
        contact = model.toJSON();
    }
    this.$el.html(this.template({contact: contact}));
  }
});

Solution

  • Case matters.

    localstorage: new Store('backbone-addressbook')
    

    needs to be

    localStorage: new Store('backbone-addressbook')
    

    If localStorage isn't set, your collection is assumed to persist to a RESTful API, and a url is required.