我正在尝试熟悉 CoffeeScript 和 backbone.js,但我一定遗漏了一些东西。
这个 CoffeeScript:
MyView = Backbone.View.extend
events: {
"click" : "testHandler"
}
testHandler: ->
console.log "click handled"
return false
view = new MyView {el: $('#test_container')}
view.render()
生成以下 JavaScript:
(function() {
var MyView, view;
MyView = Backbone.View.extend({
events: {
"click": "testHandler"
},
testHandler: function() {
console.log("click handled");
return false;
}
});
view = new MyView({
el: $('#test_container')
});
view.render;
}).call(this);
但是当我点击 test_container
时,click
事件不会触发 testHandler
。
如果我将输出 JavaScript 更改为:
$(function() {
var MyView, view;
MyView = Backbone.View.extend({
events: {
"click": "testHandler"
},
testHandler: function() {
console.log("click handled");
return false;
}
});
view = new MyView({
el: $('#test_container')
});
view.render;
});
删除 call(this)
并附加 $
,一切都按预期工作。我错过了什么?
最佳答案
(function () {}).call(this);
只是一种在指定接收者时立即调用匿名函数的方法。它的工作方式基本上与以下相同:
this.method = function () {};
this.method();
$(function () {})
,至少在 jQuery 中,是
$(document).ready(function () {})
当 DOM 树完全构建时运行给定的函数。这似乎是您的 Backbone.View.extend
功能正常工作的必要条件。
关于javascript - 为什么我的 CoffeeScript/backbone.js 事件没有触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4108169/