#javascript #json #coffeescript
#javascript #json #coffeescript
Вопрос:
Я получил несколько советов по использованию «requirejs», но у меня возникли проблемы с его работой. Я новичок в CoffeeScript, а также новичок в JavaScript.
Мой JSON-файл (или, точнее, js-файл, содержащий строку JSON) выглядит следующим образом:
define(function(require)
{
return
{
"name": "Joe",
"age": 30
}
});
В моем app.coffee есть:
requirejs.config
paths:
text: "<path to requirejs-text>"
json_path: "<path to json file>"
Мой main.coffee имеет:
define(require) ->
ko = require 'knockout'
$ = require 'jquery'
jsonObj = require 'json_path'
class Main_App
constructor ->
@age = ko.observable jsonObj.age
Я получаю следующую ошибку в моем сгенерированном JavaScript:
Неперехваченная ошибка синтаксиса: неожиданный токен :
Он жалуется на двоеточие в строке:
«имя»: «Джо»,
Кажется очевидным, что оболочка javascript вокруг моей строки JSON не структурирована должным образом. Я хотел напрямую прочитать файл «data.json», но он искал файл «.js». Мне сказали, что мне нужно обернуть строку JSON в javascript «define (function (require)», но, похоже, я не могу найти справку о том, как ее отформатировать. Кто-нибудь может меня отклеить? Спасибо!
Комментарии:
1. Согласно JSON Lint, встроенная строка JSON является допустимой. Проблема, похоже, заключается в «оболочке функций javascript», которая должна работать с requirejs. Мне было поручено сделать так, чтобы он выглядел таким образом, чтобы он «возвращал» строку JSON.
2. Есть ли лучший способ заставить CoffeeScript читать «необработанный JSON» файл, который не заключен в код javascript?
Ответ №1:
Автоматическая вставка точки с запятой в JavaScript, похоже, здесь виновата.
Когда вы пишете
define(function(require)
{
return // a ; is added here.
{
"name": "Joe",
"age": 30
}
});
Точка с запятой добавляется за вашей спиной после оператора return, поэтому функция возвращает undefined вместо вашего объекта.
Попробуйте вместо этого так :
define(function(require)
{
return {
"name": "Joe",
"age": 30
};
});
Комментарии:
1. Ой! Большое спасибо. Я думал, что JavaScript не зависит от пробелов. Я не понимал, что он обрабатывает разрывы строк как неявные точки с запятой.