我有一个用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;
})();
我的写作意图如下:
在使用构造函数(给定目录路径)创建对象时,将读取几个文件并将内容分配给类实例的字段。特别是,helper字段被指定为从另一个文件/模块导入的函数字典。
然后,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中编写任何严肃的内容。我认为这个问题可能与这个&#39;使用,我可以在编译的JS中看到,行:
handlebars.registerHelper(key, this.helpers[key]);
应该是:
handlebars.registerHelper(key, _this.helpers[key]);
虽然我认为我使用了CoffeeScript&#39; =&gt;&#39;应该已经阻止了这一点。
非常感谢任何指针。 非常感谢。
任何人都可以指出这个问题可能在哪里吗?
非常感谢。
答案 0 :(得分:1)
可能Object.keys(@helpers).forEach (key) ->
切换上下文,
试试Object.keys(@helpers).forEach (key) =>