2011-10-02 25 views
11

Có cách nào để hiển thị mẫu tới biến thay vì đầu ra không?Render mẫu thành biến trong expressjs

res.render('list.ejs', { 
    posts: posts 
}); 

một cái gì đó như thế này

var list = render('list.ejs', { 
    posts: posts 
}); 

Trả lời

22

Cách dễ nhất để làm điều đó là để vượt qua một callback để res.render, trong ví dụ của bạn:

res.render('list.ejs', {posts: posts}, function(err, list){ 
    // 
}); 

Nhưng nếu bạn muốn làm cho mẫu một phần để đưa vào mẫu khác, bạn chắc chắn cần phải có một xem view partials.

+1

tôi cần tải một phần bằng ajax trong phản hồi json – xrado

+1

do đó, tính năng này có hoạt động không? Tôi không muốn thực sự hiển thị lại một trang cho người dùng, tôi muốn bao gồm chuỗi được trả về trong một phản hồi res.json(). – chovy

+0

Có, tính năng này hoạt động. Gọi lại mặc định, đó là những gì có thể trả lại trang cho người dùng, không được gọi khi bạn tự chuyển đổi. –

2

tôi khá một newbie trên express.js, dù sao tôi không chắc chắn bạn có thể truy cập vào chuỗi trả lại theo cách đó, mặc dù nếu bạn nhìn vào tốc hành "xem .js "nguồn trên github (here) bạn thấy rằng nó chấp nhận một cuộc gọi lại như đối số thứ hai, nếu điều đó có thể giúp: bạn có thể truy cập chuỗi được hiển thị ở đó.

Nếu không, tôi nghĩ rằng khá dễ dàng để vá mã để thêm phương thức trả về chuỗi được hiển thị mà không cần gửi: on line #399 bạn có cuộc gọi cung cấp chuỗi bạn đang tìm kiếm.

1

Đây không phải là câu hỏi ban đầu, nhưng dựa trên ý kiến ​​từ OP và những người khác, có vẻ như mục tiêu là hiển thị một phần qua json (jsonp), đó là điều tôi phải làm.

Nó khá dễ dàng:

app.get('/header', function (req, res) 
{ 
    res.render('partials/header', { session: req.session, layout: null }, function (err, output) 
    { 
     res.jsonp({ html: output }); 
    });  
}); 

Lưu ý: Trong trường hợp của tôi, tiêu đề một phần yêu cầu phiên giao dịch, và thư viện mẫu của tôi (hiện-hbs) cần layout: null để làm cho một phần mà không sử dụng cách bố trí mặc định.

Sau đó, bạn có thể gọi điều này từ mã Javascript trong ứng dụng giống như bất kỳ điểm cuối JSONP nào khác.