Pergunta

Estou tentando adicionar localstorage às minhas coleções em backbone.js, mas por algum motivo, require.js não vai carregá-lo.

Aqui está o que está no arquivo main.js que carrega 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'
  }
});

Você pode ver o código fonte completo em https://github.com/tominated/Vendotron .Posso dizer que não está carregando porque, quando coloco o snippet localstorage em minha coleção, ocorre um erro no console do Chrome dizendo que Store não está definida.

Alguma ideia do que estou fazendo de errado?

Foi útil?

Solução

Existem alguns problemas.

Primeiro, você está definindo o caminho para backbone-localstorage, mas nunca o exige em lugar nenhum, então ele nunca é realmente carregado.Definir esse caminho é basicamente definir um atalho para ele, não carregá-lo.

O segundo problema é que, como o próprio backbone, a maioria dos plug-ins de backbone não são módulos AMD.Eles querem que o Backbone seja carregado primeiro, para que possam adicionar suas extensões a ele.

Parece que você está usando um fork do AMD do Backbone, mas não o backbone-localstorage.Você pode tentar encontrar um existente ou tornar seu próprio semelhantepara isso .

Ou isso, ou você pode tentar carregar o backbone-localstorage como está (adicionando à lista de dependências de sua chamada define), mas você precisaria usar o plug-in! order para garantir que o backbone seja carregado primeiro.

Outras dicas

Como Paul disse, você não precisa do módulo localstorage em lugar nenhum.Require.js 2.0 tem um mecanismo específico para código JavaScript que é essencialmente um plugin para outro código - a opção shim.Incluir localStorage ficaria assim:

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

Este exemplo foi copiado do artigo " Build Backbone AppsUsando RequireJS "que também explica como estruturar seu código e como compilar o código em um arquivo ao implantar o aplicativo.

Ao olhar dentro do código-fonte, onde o sublinhado e o backbone são necessários, sua definição de caminho na configuração necessária deve corresponder ao caminho necessário no armazenamento local, ou seja, diferencia maiúsculas de minúsculas

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top