Переменная javascript не определена, когда встроена - PullRequest
0 голосов
/ 14 января 2019

Справочная информация:

Я использую PlayFramework для создания системы веб-приложений (рабочих процессов), в которой для создания моих представлений используется шаблонный движок Twirl *1008* (на основе scala).

Проблема:

Мне нужно хранить переменные JavaScript внутри моего шаблона (который отображает HTML), где в отдельном файле (ах) JS я буду выполнять операции позже.

Какие-либо существующие решения?

Это можно сделать в соответствии с этими SO вопросами, которые я нашел:

  1. Этот создает карту, на которой данные хранятся и впоследствии извлекаются.

  2. Этот создает простой пример хранения переменной в теге встроенного сценария для использования позже

  3. Наконец, этот использует более конкретный пример хранения данных в структурах данных в шаблоне и доступа к структурам данных в JS после анализа.

Пример, созданный активным участником SO, Biesior , помогающий многим разработчикам с Play! Рамочные вопросы

Подводя итог, что следует сделать:

  1. Передать некоторые данные в шаблон

@(myData: DataObject)
  1. Добавить данные, переданные в теге script с именем JS

<html>
  <body>
    <script>
      let someJSDataName = @myData
    </script>
  </body>
</html>
  1. Использование в консоли JS / Google Chrome Dev

someJSDataName.toString

Этот должен отображать некоторый результат!

Но в чем проблема?

Позвольте мне показать вам.

Рендеринг HTML:

//...
<div class="BoxMediumBlue" style="padding: 20px;">

        <script>
                let facultyDepartments = {Science=[Computer Science, Physics], Biology=[Zooology]};
        </script>

        <br>
        <div class="container-heading">
//...

При попытке доступа к этим данным в моей консоли разработчика Google Chrome:

facultyDepartments
VM1209:1 Uncaught ReferenceError: facultyDepartments is not defined
    at <anonymous>:1:1

Просто к вашему сведению, использование var не имеет значения

Я что-то не так делаю?

1 Ответ

0 голосов
/ 14 января 2019

Ваше определение facultyDepartments использует синтаксис, который не понимает движок JS:

let facultyDepartments = {Science=[Computer Science, Physics], Biology=[Zooology]};

Объекты должны содержать пары ключ-значение, где ключи и значения разделены : с, а ключи и значения в строках имеют разделители, такие как " или '. Вместо этого вы должны попытаться получить шаблон для визуализации JSON, например:

let facultyDepartments = {"Science":["Computer Science", "Physics"], "Biology":["Zooology"]};
console.log(facultyDepartments.Science);

(технически JSON - это способ форматирования строк , но вставка строки JSON без разделителей, чтобы она также анализировалась как литерал объекта)

...