У меня есть класс, написанный в CoffeeScript:«Это» ключевое слово в классе CoffeeScript
class PresentationFramework
constructor: (framework) ->
log.info 'Looking for presentation framework module: ', framework
@template = fs.readFileSync path.join(framework, 'template.html'), 'utf8'
@renderer = handlebars.compile @template
@helpers = require path.join framework, 'helpers.js'
@render_deck = (data) =>
Object.keys(@helpers).forEach (key) ->
handlebars.registerHelper key, @helpers[key]
@renderer(data)
@
Он компилирует к следующему JS:
PresentationFramework = (function() {
function PresentationFramework(framework) {
log.info('Looking for presentation framework module: ', framework);
this.template = fs.readFileSync(path.join(framework, 'template.html'), 'utf8');
this.renderer = handlebars.compile(this.template);
this.helpers = require(path.join(framework, 'helpers.js'));
this.render_deck = (function(_this) {
return function(data) {
return Object.keys(_this.helpers).forEach(function(key) {
handlebars.registerHelper(key, this.helpers[key]);
return this.renderer(data);
});
};
})(this);
this;
}
return PresentationFramework;
})();
Я написал это с намерением следующее :
При создании объекта с конструктором (которому задан путь к каталогу) считывается несколько файлов и содержимое, назначенное полям экземпляра класса. В частности, поле помощников назначается как словарь функций, импортированных из другого файла/модуля.
Метод render_deck, затем должен пройти через вспомогательные функции dict (итерации по клавишам), а затем зарегистрировать каждую функцию хэндлеров dict с помощью рулей.
Это используется в nodejs сценария следующим образом:
plugin = PresentationFramework(sessiondata.framework);
deck = plugin.render_deck(sessiondata);
Однако, если я пытаюсь это в узел консоли возвращает следующую ошибку:
/usr/users/TGAC_ga002/bward/github/slidewinder/lib/slidewinder_lib.js:78
handlebars.registerHelper(key, this.helpers[key]);
^
TypeError: Cannot read property 'slidewinder' of undefined
at /usr/users/TGAC_ga002/bward/github/slidewinder/lib/slidewinder_lib.js:78:56
at Array.forEach (native)
at PresentationFramework.render_deck (/usr/users/TGAC_ga002/bward/github/slidewinder/lib/slidewinder_lib.js:77:45)
at slidewinder (/usr/users/TGAC_ga002/bward/github/slidewinder/lib/slidewinder_lib.js:106:19)
at Object.<anonymous> (/usr/users/TGAC_ga002/bward/github/slidewinder/bin/slidewinder.js:31:3)
at Object.<anonymous> (/usr/users/TGAC_ga002/bward/github/slidewinder/bin/slidewinder.js:33:4)
at Module._compile (module.js:435:26)
at Object.Module._extensions..js (module.js:442:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:311:12)
Это мой первый раз, написание что-то серьезное в CoffeeScript и JS. Я считаю, что этот вопрос, вероятно, с тем, как «это» используется, я могу видеть в скомпилированный JS, что линии:
handlebars.registerHelper(key, this.helpers[key]);
, вероятно, следует:
handlebars.registerHelper(key, _this.helpers[key]);
Хотя я думал, что мое использование CoffeeScript '=>' должен был помешать этому.
Любые указатели приветствуются. Большое спасибо.
Может ли кто-нибудь дать мне указатели на то, что проблема может быть здесь?
Большое спасибо.
Это просто трюк! Спасибо! – Ward9250