我有一个 [看似] 琐碎的dust.js 模板。我用来呈现模板的上下文对象包含一个处理程序,它引用上下文对象中的另一个项目。我还包括一个 toString 处理程序,它还引用上下文对象中的另一个项目。
模板:
{error}
<pre>
{#error.getStackTrace}
{.}{~n}
{/error.getStackTrace}
</pre>
语境:
{
error: {
st: ['a','b','c'],
msg: 'This is an error message',
getStackTrace: function () {
return this.st;
},
toString: function () {
return this.msg;
}
}
}
渲染:
This is an error message<pre></pre>
如果我{#error.st}
直接引用,它会正确呈现:
This is an error message<pre>a
b
c
</pre>
如果我在 getStackTrace() 处理程序中检查“this”,它会指向 DOMWindow。然而,有趣的是,隐式调用 toString() 的范围是正确的。如果我显式调用 toString() {error.toString}
,则范围会跳回 DOMWindow。
这是一个问题的唯一原因(为什么我不能error.st
直接访问)是因为 st 数组实际上存储在 Qooxdoo 属性中,而我只能访问生成的 getter。上面的示例尽可能简单地模仿实际对象。
这是dust.js中的错误吗?它是否在处理程序中失去了正确的范围?还是我在dust.js 文档中遗漏了一些东西来保留范围?