2012-02-21 2 views
3

Я пытаюсь добавить localstorage в свои коллекции в backbone.js, но по какой-то причине require.js не загрузит его.Backbone-localstorage не работает с require.js

Вот что в main.js файл, который requirejs нагрузки:

require.config({ 
    paths: { 
    'jquery': 'libs/jquery/jquery-1.7.1.min', 
    'underscore': 'libs/underscore/underscore-min', 
    'backbone': 'libs/backbone/backbone-min', 
    'backbone-localstorage': 'libs/backbone-localstorage/backbone-localstorage-min', 
    'text': 'libs/require/text' 
    } 
}); 

Вы можете увидеть полный источник в https://github.com/tominated/Vendotron. Я могу сказать, что это не загрузка, потому что, когда я помещаю фрагмент localstorage в свою коллекцию, он ошибается в консоли хром, говоря, что Store не определен.

Любая идея, что я делаю неправильно?

ответ

2

Есть пара проблем.

Во-первых, вы устанавливаете путь к backbone-localstorage, но вы никогда не требуете его нигде, поэтому он никогда не загружается. Установка этого пути в основном определяет ярлык для него, а не его загрузку.

Вторая проблема заключается в том, что, как и сама магистраль, большинство базовых плагинов не являются модулями AMD. Они хотят сначала загружать Backbone, чтобы они могли добавлять к ним свои расширения.

Похоже, вы используете AMD-вилку базовой линии, но не магистраль-localstorage. Вы можете попытаться найти существующий или сделать свой собственный similar to this.

Либо это, либо вы можете попробовать загрузить basebone-localstorage as-is (добавление в список зависимостей вашего вызова определения), но вам нужно будет использовать плагин! Order, чтобы сначала загрузить основную сетку.

+0

Спасибо Павла, который работал большим. У меня есть еще один маленький вопрос, на который вы можете ответить: как мне собрать коллекцию для синхронизации, когда я использую метод .add вместо создания? –

+0

Не волнуйся, понял это тоже. Я использовал model.save –

7

Как сказал Пол, вы не нуждаетесь в модуле localstorage в любом месте. Require.js 2.0 имеет специальный механизм для кода JavaScript, который по существу является плагином для другого кода - shim. В том числе LocalStorage будет выглядеть следующим образом:

require.config({ 
    baseUrl: "/js/", 
    paths: { 
    jquery: 'lib/jquery-1.8.0', 
    underscore: 'lib/underscore-1.3.3', 
    backbone: 'lib/backbone-0.9.2', 
    'backbone.localStorage': 'lib/backbone.localStorage' 
    }, 
    shim: { 
    underscore: { 
     exports: "_" 
    }, 
    backbone: { 
     deps: ['underscore', 'jquery'], 
     exports: 'Backbone' 
    }, 
    'backbone.localStorage': { 
     deps: ['backbone'], 
     exports: 'Backbone' 
    } 
    } 
}); 

Этот пример был скопирован из статьи «Build Backbone Apps Using RequireJS», которая также объясняет, как структурировать свой код и как компилировать код в один файл при развертывании приложения.

+4

Этот пример не работает с более новыми версиями backbone.localStorage: http://stackoverflow.com/questions/18034235/backbone-localstorage-require-js-uncaught-typeerror-undefined-is-not- а-функц –

0

Взглянув внутри исходного кода, где требуются подчеркивание и позвоночник, ваше определение пути в конфигурации требует должен вяжется с требуемым путем в местном случае хранения т.е. чувствительного