In meiner Onsen App habe ich den folgenden Splitter. Ich bin mit Jade und Rendering alle anderen Seiten aus den Listenelementen in HTML (trotz der Tatsache, dass sie in getrennten Jade-Dateien sind), indem Sie die Dateien am unteren Rand der Seite, einschließlich, wie unten dargestellt:Mit Onsen, wie man serverseitigen Code in NodeJs schreibt, die Jade-Dateien als HTML in einem Splitter rendern wird
body(ng-controller='...')
ons-splitter(var='mySplitter')
ons-splitter-side(var='menu' side='left' width='220px' collapse swipeable)
ons-page
ons-list
ons-list-item(ng-click="root.load('home.jade')", tappable='')
| Home
ons-list-item(ng-click="root.load('search.jade')", tappable='')
| Search
... more list items
ons-template(id='home.jade')
ons-page(ng-controller='...')
ons-toolbar
.left
ons-toolbar-button(ng-click='mySplitter.left.open()')
ons-icon(icon='md-menu')
.center
| My App
//- google maps stuff
ons-input#pac-input.controls(type='text', placeholder='Search Box')
div#map.col-md-12
ons-bottom-toolbar
.center
| MyApp
include search.jade
Ich glaube, das ist eine schmutzige Abkürzung, und wird den Inhalt von search.jade laden (sowie jede andere Datei, die ich einschließe), bevor der Benutzer sogar auf das Element im Splitter klickt.
Ich möchte diese Funktionalität nicht. Ich möchte stattdessen Server-Code in NodeJs haben, der die Jade-Dateien in HTML rendert, wenn sie bereit sind, dem Benutzer angezeigt zu werden. Etwas wie folgt aus:
jade.renderFile('search.jade')
Dieser Winkel Code ist zur Zeit, wie ich die Seite aus dem Artikel in dem Splitter bin Laden:
mySplitter.content.load(page)
.then(function() {
$scope.pop = page;
mySplitter.left.close();
});
Allerdings bin ich sehr verwirrt darüber, wie diese in einem Knoten Route zu schreiben . Verlasse ich die Splitterfunktion einfach in eckig?
Kann mir jemand helfen, dies für mich klarzustellen und mir ein klares Beispiel zu zeigen, wie man die Knotenroute schreibt, um die Jade-Dateien jedes Mal, wenn sie geladen werden, als HTML darzustellen?
Bitte siehe Lösung 1 von der gewählten Antwort von diesem Stapelüberlauf Beitrag für eine Referenz, was genau ich zu tun versucht: stack overflow post
Ich bin derzeit mit Lösung 2 von dieser Stelle.
Ich glaube, das der entsprechende Code in server.js ist:
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
Allerdings, wenn ich Jade zu html zu ändern, erhalte ich die Fehlermeldung: Fehler: nicht finden Modul 'html'
All Meine Frontend-Dateien im Views-Ordner haben .jade-Erweiterungen und sind in Jade geschrieben.
aktualisiert Hier ist, wie ich index.jade in einer Datei namens index.js (die in den Ansichten Ordnern) diene:
module.exports = function(app){
/* Get home page. */
app.get('/', function(req, res, next) {
res.render('index', { title: 'My App' });
});
}
Dies war meine alte Route NodeJS Route, die wird nicht mehr wegen der Splitter verwendet:
// get user search page
app.get('/user/search', function(req, res, next) {
return res.render('searchForTrainer');
});
Da Sie hier nach dem Server fragen, sollten Sie Ihren Servercode anstelle der Seiten teilen. Sie haben wahrscheinlich etwas wie 'server.js' - also sollten alle Änderungen dort vorgenommen werden. Du brauchst den Splitter nicht zu berühren - wenn der Server html (die Ausgabe von jade.renderFile) bedient, wird der Splitter das ohne Probleme handhaben. Sie sollten also nichts in Bezug auf Winkel oder den Splitter ändern - nur den Servercode. Teilen Sie den Servercode, da die Lösung davon abhängt, was Sie dort verwenden. :) –
Danke für die Klärung. Ich entschuldige mich, dies ist offensichtlich meine erste NodeJs/Onsen App, und ich bin neu in Web-Programmierung im Allgemeinen. Ich habe hinzugefügt, was ich glaube, der relevante Server-Code von Server.js zu sein. – rgins16