2013-03-09 3 views
4

Require.js와 함께 Backbone.js 프레임 워크에서 작업하는 동안 일부 데이터를 localStorage에 저장하려고합니다.Backbone.js를 사용하여 localStorage에 데이터를 저장할 수 없습니다.

그러나, 나는 다음과 같은 오류가 발생합니다 :

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

이 오류의 원인이 수 있는지에 대한 어떤 단서? 빠른 Google은 Backbone.sync가 설정되어야하지만 localStorage 어댑터가 저를 위해 이미 그렇게하지 않았는가? 내가 뭘 놓치고 있니? 편집 - -

노선과 같습니다

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

이 ...

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([ 
    '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 
    }; 
}); 

- UPDATE는 -

분명히,이 모델은 컬렉션에 링크 될 것 같지 않습니다. 따라서 컬렉션의 localStorage 집합은 모델에 적용되지 않습니다. 모델에 localStorage를 명시 적으로 설정하면 제대로 작동합니다. 하지만 내가 뭘 놓치고 있는지 누가 알 수 있니?

+0

'경로'를 볼 수 있습니까? – Mohsen

+0

@Mohsen : 경로를 포함하도록 편집 됨. 고마워 :) – mushroom

답변

0

This error은 모델에서 호출되고 url 함수가 정의되지 않은 경우 Backbone.sync의 기본 구현에 의해 throw됩니다. Backbone.sync은 모델 저장과 같은 다른 함수에 의해 암묵적으로 호출됩니다.

서버 측 저장소를 사용하는 경우 모델에 URL을 설정하고 싶을 수 있습니다. 그러나 localStorage를 사용하면 Backbone.sync 메서드를 모두 재정의해야 save, update 및 destroy 함수가 localStorage 어댑터의 작업으로 변환됩니다. 백본 localStorage 플러그인을 사용하지 않았지만 무시해야하는 것처럼 보입니다. Backbone.sync : https://github.com/jeromegn/Backbone.localStorage/blob/master/backbone.localStorage.js#L208

플러그인이로드되고 대체 기능이 실행 중인지 확인하기 위해 몇 가지 정상 성 점검을 시도하십시오.

+0

나는 Backbone.sync 문제를 알아. 그러나 backbone-localstorage.js는 이미이를 대체합니다. 문제는 require.js와 함께 backbone.localstorage TOGETHER를 사용하는 것입니다. – mushroom

+0

확인. localStorage를 모델 정의의 종속성으로 만드는 것은 어떻습니까? – rossta

+0

시도해도 여전히 같은 오류가 표시됨) : – mushroom

관련 문제