2012-05-20 2 views
2

Я пытаюсь переключиться с Джейд на Swig (заманивается безумным исполнением Swig) в качестве моего механизма шаблонов Express, когда я застрял здесь - я отправляю массив сериализованных JSON из Express в Swig и извлекаю данные в Swig, используя этот цикл здесь:JSON.parse() в Swig (Node.js)?

<ul id = "list"> 
    {% if items %} 
     {% for item in items %} 
      {{ JSON.parse(item).title }} 
     {% endfor %} 
    {% endif %} 
</ul> 

... но я получаю это:

SyntaxError: Unexpected token) 
    at Object.Function (unknown source) 
    at createTemplate (/home/vijay/node_modules/swig/index.js:72:14) 
    at getTemplate (/home/vijay/node_modules/swig/index.js:109:26) 
    at Object.compile (/home/vijay/node_modules/swig/index.js:153:16) 

Если изменить JSON.parse(item).title к JSON.parse(item) выше, вместо ошибок я получаю это на мой взгляд:

function parse() { [native code] } 

Вот посмотрите на объект item JSON:

item { 
    id  : 2, 
    title : 'City Life ', 
    author : 'Timothy J. Lindenburg', 
    date : 1337498792626, 
    indent : 0   
} 

Проще говоря, я хочу, чтобы получить доступ к отдельным ключи и значения item в Swig, но я не могу получить JSON.parse(), чтобы работать. Был бы признателен, если бы кто-то указал мне в правильном направлении (мне сказали, что Swig основан на шаблонах Django, поэтому, если вы с ними работали, это должно быть легко).

+0

1. Не могли бы вы разобрать элементы JSON в этом массиве, прежде чем передавать его Swig? Это означает что-то вроде 'items = items.map (JSON.parse);'. –

+0

Конечно, но я не хотел запускать один и тот же массив дважды, один раз с картой и снова с циклом «for», по соображениям производительности. Сейчас я получаю 864 reqs/sec, и я хочу, чтобы это пошло еще выше. Во-вторых, я не уверен, как выполнять javascript-функции в Swig; есть синтаксис для переменных и циклов, но ничего не упоминается о функциях, поэтому я надеюсь, что решение этого покажет мне, как выполнять другие функции JS. – vjk2005

ответ

4

Я не знаю, почему вы хотите разобрать его. В swig это уже JSON. Чтобы получить название, измените код {{ JSON.parse(item).title }} на номер {{ item.title }}.

Смежные вопросы