4

Require.jsと一緒にBackbone.jsフレームワークで作業しているときに、いくつかのデータをlocalStorageに保存しようとしています。

ただし、次のエラーが発生します。

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

このエラーの原因の手がかりはありますか?簡単なGoogleは、Backbone.syncを設定する必要があることを明らかにしましたが、localStorageアダプターはすでにそれを行っていませんか?私は何が欠けていますか?

関連するコードスニペットは次のとおりです。

require.config({
  paths: {
    // Major libraries
    jquery: 'libs/jquery/jquery.min',
    underscore: 'libs/underscore/underscore.min',
    backbone: 'libs/backbone/backbone.min',

    // Require.js plugins
    text: 'libs/require/text',

    // Backbone.js plugins
    localstorage: 'libs/backbone/localstorage.min',

    // Just a short cut so we can put our html outside the js dir
    // When you have HTML/CSS designers this aids in keeping them out of the js directory
    templates: '../templates'
  }
});

..。

define([
    'underscore',
    'backbone',
    'models/score',
    'localstorage'
], function(_, Backbone, ScoreModel, Store){
    var ScoreCollection = Backbone.Collection.extend({
        model: ScoreModel,
        localStorage: new Store("ScoreCollection")
    });
    return ScoreCollection;
});

..。

define([
    'underscore',
    'backbone'
], function(_, Backbone){
    var ScoreModel = Backbone.Model.extend({
    });
    return ScoreModel;
});

- 編集 -

ルートは次のとおりです。

define([
    'jquery',
    'underscore',
    'backbone',
    'views/scores/list',
    'views/scores/add'
], function($, _, Backbone, ScoreListView, ScoreAddView){
    var AppRouter = Backbone.Router.extend({
        routes: {
            'scores': 'showScores',
            'scores/add': 'addScore',
            '*actions': 'defaultAction'
        }
    });

    var initialize = function(){
        var app_router = new AppRouter;

        app_router.on('route:showScores', function(){
            var scoreListView = new ScoreListView();
            scoreListView.render();
        });

        app_router.on('route:addScore', function(){
            var scoreAddView = new ScoreAddView();
            scoreAddView.render();
        });

        app_router.on('route:defaultAction', function(){
            console.log('No route');
        });

        Backbone.history.start();
    }
    return {
        initialize: initialize
    };
});

- アップデート -

どうやら、モデルはコレクションにリンクされていないようです。したがって、コレクションに設定されているlocalStorageはモデルに適用されません。モデルにlocalStorageを明示的に設定すると、モデルが機能します。しかし、誰かが私が見逃しているものを知っていますか?

4

1 に答える 1

0

このエラーは、Backbone.syncがモデルで呼び出され、そのurl関数が未定義の場合に、Backbone.syncのデフォルトの実装によってスローされます。Backbone.syncモデルの保存などの他の関数によって暗黙的に呼び出されます。

サーバー側のストレージを使用している場合は、モデルにURLを設定する必要があります。ただし、localStorageでは、Backbone.syncsave、update、およびdestroy関数がlocalStorageアダプターの操作に変換されるように、メソッドを完全にオーバーライドする必要があります。バックボーンlocalStorageプラグインを使用していませんが、オーバーライドする必要があるようBackbone.syncです:https ://github.com/jeromegn/Backbone.localStorage/blob/master/backbone.localStorage.js#L208

プラグインがロードされ、オーバーライド関数が実行されていることを確認するために、いくつかの健全性チェックを試してください。

于 2013-03-09T04:27:23.093 に答える