簡體   English   中英

無法使用Backbone.js將數據保存到localStorage

[英]Unable to save data to localStorage using Backbone.js

我正在嘗試將一些數據保存到localStorage,同時與Require.js一起處理Backbone.js框架。

但是,我收到以下錯誤:

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

任何可能導致此錯誤的線索? 一個快速的谷歌透露,必須設置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使其工作。 但有誰知道我錯過了什么?

Backbone.sync的默認實現在模型上調用並且其url函數未定義時拋出此錯誤 Backbone.sync由其他函數隱式調用,如保存模型。

如果您使用的是服務器端存儲,則需要在模型上設置網址。 但是,對於localStorage,您需要完全覆蓋Backbone.sync方法,以便save,update和destroy函數轉換為localStorage適配器上的操作。 我沒有使用骨干localStorage插件,但它看起來應該重寫Backbone.synchttps//github.com/jeromegn/Backbone.localStorage/blob/master/backbone.localStorage.js#L208

嘗試一些健全性檢查以確保加載插件並執行覆蓋功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM