Как запустить код JQuery внутри цикла EJS forEach?

Как вы запускаете код JQuery внутри цикла EJS forEach? Я пытаюсь прочитать документ mongoDB, полученный через Node.js с Express в качестве движка. С каждым элементом я хочу создать элемент li с именем элемента в качестве текста элемента списка. На данный момент это то, что у меня есть:

    <% data[0].user_projects.forEach(function(project) { %>

            $('#projUL').append('<li><%= project.project_name %></li>');

    <% }); %>

Однако, когда я захожу на страницу, ошибок не возникает; но внутри исходного кода он показывает следующий скрипт, но он никогда не отображается на странице:

    <script>

            $('#projUL').append('<li>Express Project 1</li>');

    </script>

Если я удалю теги script, он просто вставит обычный текст того же кода. Итак, я не могу понять, как получить код jQuery внутри цикла EJS forEach. Он никогда не дает результатов, независимо от того, что я делаю. Кажется, он принимает только обычный текст.


person boom_box    schedule 29.03.2015    source источник
comment
Вы не знаете? Используйте шаблоны ejs для создания html, а не для генерации кода jquery!   -  person Bergi    schedule 30.03.2015
comment
Значит, нет способа выполнить то, что я пытаюсь сделать? EJS может изгонять только обычный html?   -  person boom_box    schedule 30.03.2015
comment
Конечно, вы можете (вероятно, ваш скрипт будет работать, как только вы создадите экземпляр <ul id=projUL>), но я имею в виду, что вы не должны. Я не вижу причин не использовать здесь обычный html.   -  person Bergi    schedule 30.03.2015
comment
Я пытаюсь связать эти li с li в другом div, который также создается динамически, и мне нужно использовать переменную счетчика для их соединения, так как я понятия не имею, сколько их поступает. И у меня есть ‹code›ul ‹/code›, созданный позже на странице, но он отказывается запускать jquery.   -  person boom_box    schedule 30.03.2015
comment
Несмотря на это, imo вы должны сначала попытаться решить эту проблему с помощью серверного программирования, прежде чем бросать на него jQuery. Кстати: создание экземпляра позже на странице очень важно здесь.   -  person Bergi    schedule 30.03.2015


Ответы (1)


Вполне вероятно, что ul projUL не находится в DOM к моменту выполнения скрипта. Если вам все еще нужно записать некоторые данные в HTML без использования шаблона, вы можете попробовать использовать готовое событие jQuery. Сначала добавьте сервер данных со сценарием, а затем, после создания UL, добавьте его.

//this will be global or use your own scope.
window.user_projects = <%= data[0].user_projects %>;
$(document).ready(function (){
   var $list = $('#projUL');
   window.user_projects.forEach(function () {
        $list.append('<li><%= project.project_name %></li>');
   });
});   
person pdjota    schedule 29.03.2015
comment
Спасибо, это было прекрасное понимание! - person boom_box; 30.03.2015