1

このTodo MVC の例と同様の構造で、Require.js を使用し、Backbone LocalStorage も使用して、最初の Backbone アプリを構築しています。問題はTweetsCollection.fetch()、HomeView で実行すると、firebug からエラーが発生することです。TypeError: options is undefined var method = options.update ? 'update' : 'reset';

ツイートコレクション:

    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();

});

ホームビュー初期化:

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

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

上記の例に従おうとしましたが、これで本当に迷っています。

4

1 に答える 1

0

エラーが発生するコード行は、successによって実行される Backbone のコールバックにありますBackbone.sync。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);
  };

バージョン より前0.9.10のバックボーン コールバック シグネチャは次のとおりです。

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

Backbone.localStorage明らかに使用しているプラ​​グインは、次のようにコールバック メソッドを実行します (146 行目)

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

ご覧のとおり、引数が正しい順序で渡されておらず、options引数が完全に欠落しており、エラーが発生しています。

そのため、Backbone.localStorage プラグインは現在、最新の Backbone バージョンと互換性がないようです。

編集:この問題を localStorage プラグインの作成者に報告しましたが、既に GitHub の問題とこれを修正するためのプル リクエストがあるようです。まだマージされていないので、当面はphoey's forkを使用するか、Backbone 0.9.9 にダウングレードしてください。

于 2013-01-22T15:01:45.813 に答える