私は[一見]些細なダスト.jsテンプレートを持っています。テンプレートをレンダリングするために使用しているコンテキストオブジェクトには、コンテキストオブジェクト内の別のアイテムを参照するハンドラが含まれています。また、コンテキストオブジェクト内の別の項目を参照するtoStringハンドラも含まれています。dust.jsハンドラで 'this'コンテキストが失われていますか?
テンプレート:
{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に戻ります。 STの配列は、実際にQooxdooプロパティに格納されており、私は唯一の生成ゲッターへのアクセス権を持っているので
これが問題である唯一の理由は、(なぜ私が直接error.st
にアクセスすることはできません)です。上の例は実際のオブジェクトを私ができるだけ単純に模倣しています。
これはdust.jsのバグですか?それはハンドラで正しい範囲を失っていますか?または、私はdust.js文書の範囲を保持するために何かを逃している?
これは正しい解決策ですが、必ずしも私の問題を解決するものではありません。私は、モデルオブジェクトとテンプレート/コンテキストが完全に分離していることを期待していました。ありがとう、ジャイロ! – schlomie
公式のオリジナルのドキュメントは間違っていますが、ダストは参照オブジェクトの構築方法には気を付けません。たとえば、プロトタイプのオブジェクトをスタックにプッシュすることができます。あなたのオブジェクト。 - 「Contexts」(http://akdubya.github。com/dustjs /) – schlomie