Обработка объектов JSON с помощью ключей UUID при создании шаблона с Handlebars.js ?

#javascript #json #handlebars.js

#javascript #json #handlebars.js

Вопрос:

У меня есть вложенный объект JSON, который выглядит следующим образом

 review:{
  body:{ 
    "1cfd0269-1b8f-418f-a7b2-45eb2fa7562b": "Text1",
    "38d14dcd-6e70-46f9-8d81-9c5237cb7393": "Text2",
    "01485828-39ef-4929-9e96-19758375eb9b": "Text3",
  }
  created_at: "2014-06-25T07:42:19Z",
  id: "ea07aaa3-9db6-4868-b6f1-0887ef77f8ba",
  product_id: "eb5a7c9c-c20d-4539-b04f-5a3fd8d26c87",
  updated_at: "2014-06-25T07:42:19Z"
  written_by: "09b3c6f1-cbcb-4544-8cc3-d073d17a8552",
  written_on: "2014-06-25"
}
  

JS довольно прост:

 var context = {review:review};
html = template(context);
  

Шаблон большой, но важная часть находится здесь

 <textarea class="review-body"> {{body["1cfd0269-1b8f-418f-a7b2-45eb2fa7562b"]}} </textarea>
  

Я получаю ошибку синтаксического анализа при попытке получить доступ к атрибутам body в шаблоне html. Есть идеи, почему это происходит?

 Uncaught Error: Parse error on line 5:
...iew-edit-context">{{body["1cfd0269-1b8f-418f-a7b2-45eb2fa7562b"]}}</tex
-----------------------^
Expecting 'ID', 'DATA', got 'INVALID'
  

Комментарии:

1. На что похожа разметка вашего шаблона?

2. Это большой шаблон, но соответствующая часть находится здесь <textarea class=»review-body»> {{body[#1cfd0269-1b8f-418f-a7b2-45eb2fa7562b]}} </textarea>

Ответ №1:

Из документа о выражениях руля :

Чтобы ссылаться на свойство, которое не является допустимым идентификатором, вы можете использовать сегментную литеральную нотацию, [ :
{{#each articles.[10].[#комментарии]}}
{{/каждый}}

что означает, что вы должны использовать {{body.[1cfd0269-1b8f-418f-a7b2-45eb2fa7562b]}} в своем шаблоне.

Смотрите http://jsfiddle.net/nikoshr/KVg9P / для демонстрации.

Ответ №2:

да, это работа над веб-страницей, и выражение AngularJS отлично восстанавливает ее, но если вы попытаетесь сделать то же самое в JavaScript, оно вернет неопределенную ошибку. например, если вы попробуете что-то вроде этого

 console.log(body.[1cfd0269-1b8f-418f-a7b2-45eb2fa7562b]);
  

или даже

 console.log(body['1cfd0269-1b8f-418f-a7b2-45eb2fa7562b']);
  

У меня нет решения для этого, но где-то упоминается, что JavaScript не похож на те, которые подписываются на UUID, я все еще ищу решение, но временно я пытаюсь удалить знак mine.