2015-03-15 2 views
0

Этот меня озадачил.EJS только вывод некоторых частей объекта ...

Я передаю объект в шаблон ejs; если я вывожу, что объект Я вижу, что я ожидаю:

{ _id: 5504a5e7ff67ac473dd7655c, code: 'GB', name: 'United Kingdom', slug: 'uk', place: 'the UK', regions: [ 'London', 'Hampshire' ] } 

И если выводить name в цикле он работает, как я ожидал:

<%countries.forEach (function(country, index) {%> 
    <li><%= country.name %></li> // Outputs 'United Kingdom' 
<% }) %> 

Однако, если я пытаюсь получить доступ к ничего но имя он выводит пустой:

<%countries.forEach (function(country, index) {%> 
    <li><%= country.code %></li> // Outputs '' 
<% }) %> 

Я не могу понять это, я делаю что-то до боли очевидно, неправильно, или это, как сумасшедший, как Я думаю?

Редактировать: _id также будет выводиться. Итак, _id и name вывод, как и ожидалось, все остальные выводятся пустым при вызове напрямую.

+0

Как вы передаете данные в EJS? И что он выводит, если вы помещаете 'console.log (страна)' внутри цикла? – victorkohl

+0

Все выходы прекрасно! Это сумасшедшая вещь. Это нормально в выражении при выводе на консоль (просто передается в 'res.render'), а вывод, который вы видите выше, - это то, что я получаю при выводе' country' непосредственно внутри этого 'forEach'. Я не могу понять это. –

+0

Добавление редактирования: '_id' также выводит штраф. Таким образом, '_id' и' name' выводятся, ничего больше. –

ответ

0

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

Моя модель Mongoose для схемы, используемая для извлечения данных страны, имела неправильную схему. Это была операция копирования и вставки из другой модели, и я, по-видимому, обновил все, кроме самой схемы, важно, что name был единственной общей переменной между двумя схемами, и поэтому я предполагаю, что это причина, по которой это единственная работа, (а также _id, конечно).

Если кто-нибудь может сказать мне почему это так, я хотел бы знать, как, хотя это, безусловно, решение, которое я понятия не имею, почему схема будет влиять на ejs «s способность читать переменную внутри объекта, но не имеют проблем с выдачей самого объекта в полном объеме.

0
{ _id: 5504a5e7ff67ac473dd7655c, code: 'GB', name: 'United Kingdom', slug: 'uk', place: 'the UK', regions: [ 'London', 'Hampshire' ] } 

вы con't петли на объекте

<%countries.forEach (function(country, index) {%> 
    <li><%= country.name %></li> // Outputs 'United Kingdom' 
<% }) %> 

внутри EJS просмотра вы пытаетесь рамочного тур

внутри контроллера вы должны пройти, чтобы посмотреть, как это

[{ _id: 5504a5e7ff67ac473dd7655c, code: 'GB', name: 'United Kingdom', slug: 'uk', place: 'the UK', regions: [ 'London', 'Hampshire' ] }] 

forEach работает над массивами в javascript

+0

Объект находится внутри массива, это массив объектов. Смотрите мой ответ за то, что проблема! –

+0

вы можете поделиться своим кодом контроллера – HDK

+0

Чтение вопроса, хотя я понимаю, почему это не ясно. Этот объект является результатом «страны», а не «стран». –