2013-06-09 12 views
5

Birden çok .ejs dosyasını nasıl yuvalanmış biçimde oluşturabilirim? , Içerik varsayılır index.ejs çok temel html etiketi oluşurBirden çok .ejs dosyası Node.js ve Express'te iç içe formda nasıl oluşturulur?

var mysql = require('mysql'); 
var ejs = require('ejs'); 
exports.index = function(req, res){ 
    if (req.method=='POST'){ 
     var connection = mysql.createConnection({user:'root', password:'root', database:'testdb'}); 
     var name = req.param('name'); 
     connection.query('select * from table_name where name = ?', name, function(err, rows, fields){ 
      if(err) throw err; 
      res.render('index', { 
       title: 'title', content: res.render('index2', {data:rows}) 
      }); 
     }); 
    } 
}); 

(demek html, baş, gövde ve bir p etiketi) ve içindeki <%- content %> var: Ben aşağıdaki dosyayı var Yani

html, başlık veya gövde etiketi içermeyen ve yalnızca bir içerik ve bir başlık oluşturulduğu varsayılan başka bir .ejs dosyası tarafından oluşturulmalıdır. Ancak, bu dosyaya POST isteğiyle eriştiğimde ve dosyaları görüntüledikten sonra çıktılanan HTML dosyasını tarayıcımdan kontrol ettiğimde, içerik yalnızca index2.ejs dosyasından oluşuyordu, yani html, body, head etiketi yok.

Peki neden eksiklerim? Ve eğer bir javascript kütüphanesini <script src='some_file.js'></script>'a eklemek istersem, index2.ejs dosyasında render etmeye çalıştığımda başka bir render özelliği eklemeliyim ... değil mi?

Teşekkürler.

cevap

9

Partials yoktur, seni res.render çalışır nasıl karıştı düşünüyorum. docs göre:

res.render (görünümü, [yerli], geri arama)

bir geri arama hale dize yanıt olan bir görünümü oluşturur. Yalnızca HTML sayfanıza index2.ejs içeriğini nedenle görüyorsunuz

hangi açıklıyor.


Artık, hedefinize ulaşmanın birçok yolu vardır; Express 3.x'ten başlayarak, include'u kullanmanız gerekir. Bu durumda, aşağıdaki gibi görünümlerinizi yeniden yazabilirsiniz:
1- Bu gibi görünecek bir header.ejs dosyasını tanımlayın. example.
2- Bir footer.ejs tanımlayın. Bu diğer example gibi görünecekti.

<% include header %> 
    //The HTML of your index2.ejs 
    //You can add some reusable views, like, say, a submit button above the footer 
    <% include reusable_views/submit %> 
<% include footer %> 

İkinci yöntem ejs-locals kullanmaktır, sadece kendi yolunu belirterek, herhangi bir görünüm eklemek için izin verir:

res.render('index', { 
       title: 'title', 
       content: 'index2', 
       data:rows 
      }); 
sizin index2.ejs ise
3- böyle bu iki dosyayı içerir

Ve senin index1.ejs içinde şunlara sahip olacak:

<html><head> 
<title><%= title %></title></head> 
<body><p> 
<%- partial('index2',{}) %> 
</p></body></html> 

Bu yöntemin avantajı, görünümüne ekstra değer geçirebilirsiniz edilir bizi fazladan nesneyi Daha fazla ayrıntı için ejs-locals github sayfasına göz atın.

1

iyi standart HTML gibi head, footer, sidebars ya da her neyse .. için .. örnek her şeyi açıklıyor İlk