口ひげのチュートリアルを行った
この質問は、口ひげのテンプレートを別のテンプレートに埋め込むに少し関連しています
パーシャル以外はすべて機能しています
やってみました
base.mustache:
{{testVar}}
<h2>Names</h2>
{{#names}}
{{> user}}
{{/names}}
user.mustache:
<strong>{{name}}</strong>
ただし、ユーザーテンプレートまたはそのコンテンツ、つまり名前の値をレンダリングする代わりに、レンダリングしましたNames c:\blahFolder\user.mustache
テンプレートをプリコンパイルするには、hogan-template-compiler を使用します。
上記の情報からなぜそれが起こっているのか理解できますか、それとももっと情報が必要ですか? testVar
値が正しくレンダリングされるため、コンパイラ コードは問題ないと思います。
本当に見る必要がある場合は、ここに私のhoganCompiler.jsがあります
var partialsDir = __dirname + '/views/partials'
, jsDir = __dirname + '/public/js/compiled';
var hogan = require('hogan.js')
, path = require('path')
, join = path.join
, fs = require('fs')
, onModify
, relations = {}
, watch;
onModify = function (filename)
{
console.log('Changed', filename);
if (relations[filename])
{
filename = relations[filename];
}
console.log('Which relate on', filename);
var path, contents;
path = join(partialsDir, filename);
try
{
if (!filename.match(/\.mustache/) || !fs.statSync(path).isFile())
{
return;
}
}
catch( err )
{
console.log( "Failed to stat file " + path + " - skipping");
return;
}
contents = fs.readFileSync(path).toString();
var templateName = filename.replace(/.mustache$/, '');
// TODO: catch compiler exception..
var compiledTemplate =
templateName + " = new Hogan.Template("
+ hogan.compile(contents, {asString: true}) + ");";
var jsFilename = filename.replace(/mustache$/, 'js');
fs.writeFileSync(join(jsDir, jsFilename), compiledTemplate );
}
watch = function (filename)
{
if (relations[filename])
{
return;
}
var path;
if (filename.charAt(0) == '/')
{
path = filename;
}
else
{
path = join(partialsDir, filename);
}
// fs.watch(path, function (event, f)
fs.watchFile(path, function (event, f)
{
console.log('event is: ' + event);
if( !f ) // fs.watch doesn't work on all platforms..
{
// fall back to just reprocessing all in dir
fs.readdirSync(path).forEach(onModify);
}
else
{
onModify(f);
}
});
}
fs.readdirSync(partialsDir).forEach(onModify);
watch(partialsDir);
function getPartials(partials, dir)
{
var baseDir = __dirname + '/views/';
var files = fs.readdirSync(dir);
for (var i in files)
{
if (files[i].match(/\.mustache/) && fs.statSync(join(dir, files[i])).isFile())
{
partials[files[i].replace(/.mustache$/, '')] =
join(dir, files[i]).replace(baseDir, '');
}
}
return partials;
}
var partials = {};
partials = getPartials(partials, partialsDir);
exports.partials = getPartials(partials, join(partialsDir, '..'));