2013-01-22 4 views
1

Je construis ma première application Backbone avec une structure similaire à celle Todo MVC example avec Require.js et en utilisant Backbone LocalStorage. Le problème est quand je lance TweetsCollection.fetch() dans AccueilVoir, Firebug me donne l'erreur: TypeError: options is undefinedvar method = options.update ? 'update' : 'reset';Backbone.js Collection chercher erreur

TweetsCollection:

define([ 
    'underscore', 
    'backbone', 
    'backboneLocalStorage', 
    'models/TweetModel' 
], function(_, Backbone, Store, TweetModel) { 

'use strict'; 

    var TweetsCollection = Backbone.Collection.extend({ 

     model: TweetModel, 

     localStorage: new Store('tweets-storage'), 

     initialize: function() { 
      console.log('Collection init...'); 
     } 

    }); 

    return new TweetsCollection(); 

}); 

AccueilVoir INIT:

initialize: function() { 
      this.listenTo(TweetsCollection, 'add', this.addOne); 
      this.listenTo(TweetsCollection, 'reset', this.addAll); 
      this.listenTo(TweetsCollection, 'all', this.render); 

      TweetsCollection.fetch(); // <- Error here 
     }, 

J'essaie de suivre l'exemple ci-dessus , mais je suis vraiment perdu avec ça.

Répondre

0

La ligne de code où se produit l'erreur se trouve dans le rappel success de Backbone qui est exécuté par Backbone.sync. Voici ce que cette méthode ressemble à Backbone 0.9.10:

options.success = function(collection, resp, options) { 
    var method = options.update ? 'update' : 'reset'; 
    collection[method](resp, options); 
    if (success) success(collection, resp, options); 
    }; 

Avant la version 0.9.10, la signature de rappel Backbone était:

options.success = function(resp, status, xhr) { ... 

Le plugin Backbone.localStorage, que vous utilisez évidemment, executes the callback method as follows (line 146):

if (options && options.success) 
    options.success(resp); 

Comme vous pouvez le voir, il ne passe pas les arguments dans le bon ordre, et il manque options un tout à fait, où vous voyez l'erreur. Il semblerait donc que le plugin Backbone.localStorage est actuellement incompatible avec la version la plus récente de Backbone.

Edit: Je suis allé signaler cette question à l'auteur du plugin localStorage, mais semble comme il y a déjà un GitHub issue and pull request pour résoudre ce problème. Il n'est pas encore fusionné, donc en attendant vous pouvez utiliser phoey's fork ou rétrograder à Backbone 0.9.9

+0

Merci! Rétrogradé à 0.9.9 – Potty

Questions connexes