У меня есть [казалось бы] тривиальный шаблон dust.js. Объект контекста, который я использую для визуализации шаблона, содержит обработчик, который ссылается на другой элемент в контексте объекта. Я также включаю обработчик toString, который также ссылается на другой элемент в объекте context.dust.js теряют «этот» контекст в обработчиках?
Шаблон:
{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(), он указывает на DOMWindow. Интересно, однако, что вызов функции toString() неявно, она правильно определена. Если я явно вызываю toString() {error.toString}
, то область возвращается к DOMWindow.
Единственная причина, по которой это проблема, (почему я не могу напрямую получить доступ к error.st
), потому что массив st фактически хранится в свойстве Qooxdoo, и у меня есть только доступ к сгенерированному getter. Вышеприведенный пример имитирует фактический объект как можно проще.
Это ошибка в dust.js? Потеряет ли он правильную область в обработчиках? Или я пропущу что-то в файле dust.js, чтобы сохранить область видимости?
Это правильное решение, но это не обязательно решает мою проблему. Я надеялся, что объект модели и шаблон/контекст будут полностью разделены. Спасибо, jairo! – schlomie
Несмотря на то, что официальные [оригинальные] документы ошибочны: «Пыли все равно, как создаются ваши эталонные объекты. Например, вы можете протолкнуть прототипированные объекты в стек. Система оставляет это ключевое слово неповрежденным при вызове функций обработчика на ваши объекты. " - под заголовком «Контексты» (http: //akdubya.github.com/dustjs /) – schlomie