【发布时间】:2015-08-04 20:03:22
【问题描述】:
给定以下设置代码(松散现实)
default.js(由 config.js 用于加载基本配置)
{
"templateData": {
"corp": {
"corpName": "Company",
"DepartmentOne": {
"name": "DepartmentOne",
"phone": "1-800-555-555",
"email": "departmentone@company.com"
},
"address": {
"main": {
"addressLine1": "Somwhere",
"city": "SomeTown",
"stateShort": "SState",
"stateLong": "SomeState",
"zipCodeShort": "Zippy"
}
},
"urls": {
"company": {
"corporate": {
"site": "https://company.com/",
"logo": "http://sites.company.com/images/logo.png",
"altText" : "Company Corporate Logo"
},
"facebook": {
"site": "https://www.facebook.com/company",
"icon": "http://sites.company.com/images/facebook.png",
"altText" : "Company Facebook Page"
},
"twitter": {
"site": "https://twitter.com/company",
"icon": "http://sites.company.com/images/twitter.png",
"altText" : "Company Twitter Feed"
},
"youtube": {
"site": "https://www.youtube.com/company",
"icon": "http://sites.company.com/images/youtube.png",
"altText" : "Company YouTube Channel"
}
}
},
"currentYear": "2015",
"corpWebSiteName": "Company.com"
}
}
}
test01.js(主节点代码)
var fs = require('fs');
var bunyan = require('bunyan');
var jade = require('jade');
var config = require('config');
var restify = require('restify');
var log = bunyan.createLogger({src: false, name: "emailTemplateMerger"});
var html = '';
var corpConfig = config.get('templateData');
var emailData = { 'emailAddress' : 'nonya@bidness.com',
'firstName' : 'nonya',
'lastName' : 'bidness'
}
var miscData = { 'billingDate' : '2015-08-01',
'accountType' : 'new',
'discountTypes' : {
'primary' : 'Coupon20',
'bonus' : 'First30Days',
'standard' : 'freeShipping'
}
}
fs.readFile('./emailTemplates/test01.jade', 'utf-8', function(error, source){
var template = jade.compile(source);
html = template(corpConfig)
console.log(html);
});
翡翠模板:
html
head
body
p.
Hello #{emailData.firstName},
p.
Welcome to #{corp.corpName}'s #{DepartmentOne.name}.
p.
Your next bill will be sent on #{miscData.billingDate} for your #{miscData.accountType}.
p.
Thank you
问题:确定将配置数据和 2 个本地数据集(将通过 REST 传入)合并到 Jade 模板中的有效方法。
由于数据有很多层次的嵌套,直接合并可能很复杂,并且可能容易出错,具体取决于传入的数据,是否有传递 Jade 多个单独的数据集并将合并推迟到 Jade 引擎?
我尝试了多次传递,但是 Jade 合并的一次传递会从模板中删除所有标签,因此没有成功。反正我还没想出链接结果。
【问题讨论】:
-
上面的示例代码忽略了本地数据对象 miscData 和 emailData。
-
有一些库 (Lodash) 可以执行高效的深度克隆/合并
-
我尝试了 Lodash 库,合并对这个项目非常有用。但是,我在下面选择了 Ryan 的答案,因为这是最简单的方法。
标签: javascript json node.js pug