Reputation: 963
I have this file to add a new Ship and the script to populate de fleet dropdown menu works fine:
new.ejs file:
<% include ../partials/header %>
<div class="container">
<div class="row">
<h1 style="text-align: center;">Create a new Ship</h1>
<div style="width: 30%; margin: 25px auto;">
<form action="/ships" method="POST">
<div class="form-group">
<input class="form-control" type="text" name="name" placeholder="name">
</div>
<div class="form-group">
<input class="form-control" type="number" name="tons" placeholder="tons" min="0" step="1">
</div>
<div class="form-group">
<input class="form-control" type="text" name="image" placeholder="img url">
</div>
<!--<div class="form-group">-->
<!-- <input class="form-control" type="text" name="fleet" placeholder="fleet">-->
<!--</div>-->
<div class="form-group">
<select class="form-control" type="text" name="fleet" id="selectNumber" placeholder="fleet">
<option>Choose a fleet</option>
</select>
</div>
<script>
var select = document.getElementById("selectNumber");
var options = ["First fleet", "Second fleet", "Metropolitan fleet", "Support fleet"];
for(var i = 0; i < options.length; i++) {
var opt = options[i];
var el = document.createElement("option");
el.textContent = opt;
el.value = opt;
select.appendChild(el);
}
</script>
<div class="form-group">
<input class="form-control" type="text" name="description" placeholder="description">
</div>
<div class="form-group">
<button class="btn btn-lg btn-primary btn-block">Submit!</button>
</div>
</form>
<a href="/ships/">Back</a>
</div>
</div>
</div>
<% include ../partials/footer %>
I want to separate the "logic" from the view, so I need to create a file: ../public/js/jsscripts.js
and I guess inside the jsscripts.js
module.exports = {
PopulateFleet: function () {
var select = document.getElementById("selectNumber");
var options = ["First fleet", "Second fleet", "Metropolitan fleet", "Support fleet"];
for(var i = 0; i < options.length; i++) {
var opt = options[i];
var el = document.createElement("option");
el.textContent = opt;
el.value = opt;
select.appendChild(el);
}
};
1) Do I need to require the file "jsscripts" from my app.js ? Something like:
jscripts= require ("./public/js/jscripts");
2) How to call the function "PopulateFleet" from the new.ejs file? something like??
<% PopulateFleet %>
or
<% jscripts.PopulateFleet %>
Folder structure
Fleet - public - js -> jsscripts.js
Fleet - views - ships -> - new.ejs
Upvotes: 1
Views: 1988
Reputation: 830
I have the same issue and I find a solution. So I know this solution is not the ideal solution but it's works.
I have a function's file "my_functions.js" with code like that :
var processSomething = function(variableXXXX)
{
...
...
return(variableNew)
}
module.exports.processSomething = processSomething;
I require this file into "application.js" like that :
var myFonctions = require('./include/my_fonctions.js');
And I pass this variable to my EJS like that
res.render('view.ejs',{myFonctionsForEjs:myFonctions});
And, in my EJS File I can do that
var response = myFonctionsForEjs.processSomething(1234);
Upvotes: 2