答え:
new
クラス インスタンスを作成するときに、キーワードの使用を怠っていたことが判明しました。質問自体のコードは問題ありません。
質問:
コンストラクターがクラス (editor_for_node) で別のメソッドを呼び出すかなり単純なクラスがあります。呼び出しは jQuery each() ループ内で行われますが、外側にも移動しようとしました。
define ['jquery'], ($) ->
class Editor
constructor: (@node, @data, @template) ->
@node.widgets().each (i, elem) =>
data = if @data then @data[i] else null
node = $(elem)
@editor_for_node node, data
editor_for_node: (node, data) ->
console.log 'hello!'
return {
'Editor': Editor,
}
行@editor_for_node node, data
が呼び出されると、(Firebug で) というエラーが表示されますthis.editor_for_node is not a function
。
なぜこれが適切に機能しないのか、私には本当にわかりません.私が見ることができる奇妙な唯一の原因は、最初にrequire.jsのdefine関数を使用することです.
編集:生成された出力
(function() {
define(['jquery'], function($) {
var Editor;
Editor = (function() {
Editor.name = 'Editor';
function Editor(node, data, template) {
var _this = this;
this.node = node;
this.data = data;
this.template = template;
this.node.widgets().each(function(i, elem) {
data = _this.data ? _this.data[i] : null;
node = $(elem);
return _this.editor_for_node(node, data);
});
}
Editor.prototype.editor_for_node = function(node, data) {
return console.log('hello!');
};
return Editor;
})();
return {
'Editor': Editor
};
});
}).call(this);