2013-03-09 3 views
49

Я хочу сохранить json-документ для хранения некоторых простых данных, и я хочу потребовать этот документ и использовать json-объект в вызове define(), чтобы я мог его использовать. Это не асинхронный вызов. Я имею в виду, что это должно быть для разработки, но я хочу скомпилировать файл на сборке в отличие от фактического асинхронного вызова от API, где контент является динамическим.requirejs load static JSON file

+0

Именно ваш вопрос тогда? потому что я не вижу никаких проблем с этим. –

+1

@ WillemD'haeseleer Ну, я не уверен, как я должен это делать. Я не могу включить файл '.json' в пути. – ThomasReggi

ответ

60

Самый простой способ сделать это - использовать плагин requirejs json для этого, это позволит вам также включить ваш файл в сборку.

https://github.com/millermedeiros/requirejs-plugins
Вот пример:

require(['json!someFile.json'], function(data){ 
    ... 
}) 
// It does not actually need to be a .json extension, this will work to: 
require(['json!someFile'], function(data){ 
    ... 
}) 

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

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

https://github.com/requirejs/text

Вам придется разобрать содержимое вашей собственной личности, то с JSON.parse
(Включить json2.js, чтобы обеспечить поддержку старых браузеров, если это требуется)

Вы также можете обернуть в JSON в своем собственном определить(), поэтому вы можете просто потребовать его традиционно, но это не сработает, если вы ограничены фактическим файлом .json.

Другой вариант - потребовать, чтобы текстовый файл зависел от ajax your self, с jquery или чем-то еще.

$.get('somefile.json', function(data) { 
    // do something with your data 
}); 
+3

Я пошел с 'requirejs-plugins', и у меня есть плагин' json', который я полностью игнорировал. Однако он использует «текст» как зависимость. Так что спасибо! Я только начал работать с requirejs сегодня в браузере, и это потрясающе. Я все еще надеюсь, что когда я его построю, он перестанет использовать ajax для извлечения документа. – ThomasReggi

+0

@ThomasReggi проверить мой адаптированный ответ для получения информации об этом –

+1

У меня возникли проблемы с использованием текста! для контента JSON в сочетании с r.js для оптимизации. Просто голова. – SimplGy

8

Проводка ли это ответ, потому что:

  • это то, что пользователь задает вопрос на самом деле используется в качестве решения
  • это уборщик, чтобы смотреть на, чем требуется текст, так как он всегда делает JSON.parse() для вас.

RequireJS has a JSON plugin. Синтаксис прост:

require(['json!someData.json'], function(data){ 
    ... 
}) 
+3

для тех, кто находит это неясным, ["json!/Some/ajax/endpoint"] тоже отлично работает – penguat

+2

Можно ли загрузить локальный файл? – Erik

+1

@erik Обычно я использую веб-сервер (через gulp) для локального развития, поэтому всегда загружайте URL http: // или https: //. Я бы порекомендовал вам сделать то же самое. Если вы спрашиваете о файлах: // URL, я не знаю. – mikemaccana