2016-12-22 5 views
0

Я пытаюсь преобразовать код из swig в ejs, но столкнулся с проблемой с циклом «для».nodejs foreach swig и ejs

Проблема заключается в том, что цикл внутри файла swig выполняется циклически через содержимое файла config.json. Однако, когда я пытаюсь реализовать аналогичный код в ejs, я не могу заставить его работать и нуждаться в некоторых рекомендациях.

У меня есть файл config.json я зацикливание корыта:

{ 
    "server" : { 
    "port" : 3000, 
    "ssl" : false, 
    "ssl_cert" : "/home/pi/lirc_web/server.cert", 
    "ssl_key" : "/home/pi/lirc_web/server.key", 
    "ssl_port" : 3001 
    }, 
    "repeaters": { 
    "lg": { 
     "KEY_VOLUMEUP": true, 
     "KEY_VOLUMEDOWN": true 
    } 
    }, 
    "macros": { 
    "TESTTV": [ 
     [ "lg", "KEY_VOLUMEUP" ], 
     [ "lg", "KEY_VOLUMEUP" ], 
     [ "lg", "KEY_VOLUMEDOWN" ] 
    ] 
    }, 
    "commandLabels": { 
    "lg": { 
     "KEY_VOLUMEUP": "Volume Up", 
     "KEY_VOLUMEDOWN": "Volume Down" 
    } 
    }, 
    "remoteLabels": { 
    "lg": "LG TV" 
    }, 
    "blacklists": {  
    } 
} 

route.js файл содержит (фрагмент кода):

config = require('../config.json'); 

app.get('/profile', isLoggedIn, function(req, res) 
{ 
    app.get('/remotes.json', function (req, res) { 
     res.json(refineRemotes(lircNode.remotes)); 
    }); 

    var refinedRemotes = refineRemotes(lircNode.remotes); 
     res.render('remotes.ejs', { 
     macros: macrostwo, 
     remotes: refinedRemotes, 
     macros: config.macros, 
     repeaters: config.repeaters, 
     labelForRemote: labelFor.remote, 
     labelForCommand: labelFor.command, 
     }); 

     console.log('DEBUG: ConfigFile Macros: \n', macrostwo); 
}); 

файла SWIG, который работает содержит :

<ul class="macros-nav"> 
    {% for macro in macros %} 
    {% set macroName = loop.key %} 
    <li><button class="btn btn-wide btn-large btn-warning macro-link" href="/macros/{{ macroName|url_encode }}">{{ macroName }}</button></li> 
    {% endfor %} 
    </ul> 

EJS файл им работать на есть ниже код:

<ul class="macros-nav"> 
    <% macros.forEach(function(macro){ %> 
     <li><button class="btn btn-wide btn-large btn-warning macro-link" href="/macros/<%=macro.name%>"> <%=macro.name%> </button></li> 
    <% }) %> 
</ul> 

Если я изменить свой файл routes.js, чтобы передать ниже код для EJS просмотра цикла Еогеасп правильно работает

var macrostwo = [ 
{ name: 'Nathan Explosion', message: 'Dethklok rules' }, 
{ name: 'William Murderface', message: 'Bass is the heart of the band' }, 
{ name: 'Dr. Rockso', message: 'Where is my friend Toki?' } 
]; 

app.get('/profile', isLoggedIn, function(req, res) 
{ 
    app.get('/remotes.json', function (req, res) { 
     res.json(refineRemotes(lircNode.remotes)); 
    }); 

    var refinedRemotes = refineRemotes(lircNode.remotes); 
     res.render('remotes.ejs', { 
     macros: macrostwo, 
     remotes: refinedRemotes, 
     macros: macrostwo,    //config.macros, 
     repeaters: config.repeaters, 
     labelForRemote: labelFor.remote, 
     labelForCommand: labelFor.command, 
     }); 

     console.log('DEBUG: ConfigFile Macros: \n', macrostwo); 
}); 

EDIT1:

Я пытался получить он объект .keys, но я просто получаю «1» при печати на консоль. Я знаю, что я использую macros.name в файле ejs, который является «не», существующим в config.json. Проблема в том, что я не знаю, как получить имена ключей при циклическом прогибе.

/Thomas

ответ

0

Найдено решение:

route.js:

app.get('/profile', isLoggedIn, function(req, res) 
{ 
    app.get('/remotes.json', function (req, res) { 
     res.json(refineRemotes(lircNode.remotes)); 
    }); 

    console.log('=============\n');   

    var keys = Object.keys(config.macros); 
    console.log(keys); 

    console.log('\n=============\n'); 

    var refinedRemotes = refineRemotes(lircNode.remotes); 
    res.render('remotes.ejs',{ 
     remotes: refinedRemotes, 
     macros: keys, //config.macros, 
     repeaters: config.repeaters, 
     labelForRemote: labelFor.remote, 
     labelForCommand: labelFor.command, 
    }); 
}); 

EJS файл:

<ul class="macros-nav"> 
    <% macros.forEach(function(macro){ %> 
     <li><button class="btn btn-wide btn-large btn-warning macro-link" href="/macros/<%=macro%>"> <%=macro%> </button></li> 
    <% }) %> 
</ul>