我已经使用nunjucks几个月,并发现它是一个伟大的模板引擎.然而,今天早上我遇到了一个看似简单的问题,但我根本想不出来.我希望另一组眼睛可以帮助指出解决方案.
问题:如果我将一个函数传递给一个模板,那么传递给该函数的任何参数都是在函数体内未定义的.
值和对象可以毫无问题地传递给模板,如果我传递一个函数,我可以从函数内部登录到控制台(所以我知道函数本身就在那里),但参数都是未定义的.
这最初看起来像是可以通过闭包解决的东西,但是1)我在任何可以找到的例子中看不到闭包,2)当我尝试闭包时,我发现它们也接收到未定义的参数.
在一天的过程中,我将我的代码缩回到最简单的可能情况,但仍然无法弄清楚这一点:
模板:
<div>
<p>{{ value }}</p>
<p>{{ object|pretty }}</p>
<p>{{ func(4) }}</p>
<p>{{ args(4)|pretty }}</p>
<p>{{ local(4) }}</p>
</div>
Run Code Online (Sandbox Code Playgroud)
呈现模板的代码(这是在requirejs中定义的,未显示):
var nunjucks = require('lib/nunjucks-slim.min'), // v1.3.4
env = new nunjucks.Environment(null), // global templates
$tgt = $('#test'),
local;
env.addGlobal('value', 3);
env.addGlobal('object', {
a: 2
});
env.addFilter('pretty', function (obj) {
return JSON.stringify(obj, null, 2);
});
env.addGlobal('func', function (val) {
return 'func: ' + val;
});
env.addGlobal('args', function () {
return arguments;
});
local = function (val) {
return …Run Code Online (Sandbox Code Playgroud)