2011-12-27 4 views
12

Sử dụng Express.js, tôi muốn hiển thị chế độ xem từng phần từ mẫu Jade thành biến.Trong Express.js, làm cách nào tôi có thể hiển thị một phần xem Ngọc mà không có đối tượng "phản hồi"?

Thông thường, bạn làm cho một phần-view trực tiếp đến đối tượng response:

response.partial('templatePath', {a:1, b:2, c:3}) 

Tuy nhiên, vì tôi là bên trong một sự kiện máy chủ Socket.io, tôi không có "phản ứng" đối tượng.

Có cách nào thanh lịch để hiển thị chế độ xem một phần của Jade thành biến số mà không cần sử dụng đối tượng phản hồi không?

Trả lời

13

Bạn có thể biên dịch mẫu Jade một cách thủ công.

var jade = require('jade'); 
var template = require('fs').readFileSync(pathToTemplate, 'utf8'); 
var jadeFn = jade.compile(template, { filename: pathToTemplate, pretty: true }); 
var renderedTemplate = jadeFn({data: 1, hello: 'world'}); 
+2

trình một cách hoàn hảo, cảm ơn! Tôi sử dụng sau đây để giải quyết pathToTemplate: var pathToTemplate = require ('path'). Resolve (__ dirname, '../views') + templateName + '.jade'; –

+1

Cảm ơn bạn rất nhiều! Tôi đã có vấn đề này cố gắng để phù hợp với một phần, và câu trả lời của bạn là kết quả đầu tiên trong google. Bạn Rock man! –

+0

Câu trả lời này đúng ** nhưng nếu bạn muốn sử dụng cơ chế bộ nhớ cache **, hãy kiểm tra [matthias response] (http://stackoverflow.com/questions/8644580/in-express-js-how-can-i-render-a -jade-partial-view-without-a-response-object # answer-12725703) – fider

13

Đây là giải pháp cho vấn đề này thẳng cho express 3 người dùng (mà phải được truyền bá rộng rãi hiện nay):

res.partial() đã được gỡ bỏ, nhưng bạn luôn có thể sử dụng app.render() bằng cách sử dụng chức năng gọi lại, nếu đối tượng phản ứng không phải là một phần của bối cảnh hiện nay như thế nào trong trường hợp Liors:

app.render('templatePath', { 
    a: 1, 
    b: 2, 
    c: 3 
},function(err,html) { 
    console.log('html',html); 
    // your handling of the rendered html output goes here 
}); 

Kể từ app.render() là một hàm của objec ứng dụng nhanh nó tự nhiên nhận thức được công cụ mẫu được cấu hình và các thiết lập khác. Nó hoạt động giống như cách res.render cụ thể() trên app.get() hoặc các sự kiện yêu cầu nhanh khác.

Xem thêm:

+0

Cách này tốt hơn vì sử dụng bộ nhớ cache? Tôi đúng không? @matthias ** sửa tôi nếu tôi sai **? – fider

+0

Theo như tôi nhớ, (biên dịch) các mẫu ngọc được lưu trữ trong môi trường sản xuất (NODE_ENV = "sản xuất"), vì vậy đó là sự thật. Mặt khác, với phương pháp tiếp cận đọc-từ-fs-và-biên dịch bằng tay của @emostars, bạn đủ linh hoạt để tự kiểm soát hành vi của bộ nhớ đệm, ví dụ: tái sử dụng '' 'jadeFn''' mà không cần phải đọc lại hoặc biên dịch lại chuỗi mẫu ngọc gốc. – matthias