javascript - 为什么我的 CoffeeScript/backbone.js 事件没有触发?

标签 javascript jquery coffeescript backbone.js

我正在尝试熟悉 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/

相关文章:

Jquery 和变量 ID 名称

ruby-on-rails - 主干和 rails 。为什么要在 Backbone 中设置路由?

javascript - event.pageX/Y 不适用于 touchmove

javascript - 为什么couchdb的reduce是这样实现的呢?

javascript - Angular 2 形式的正则表达式应用

javascript - 在 Excel 中下载并打开 CSV 适用于 Chrome 和 Firefox,但不适用于 IE 或 Edge

javascript - 仅允许数字和 ctrl+a 、 ctrl+v 、 ctrl+c 到文本框

jquery - 我如何从 jquery ajax 向 Flask View 发送 POST 请求?

JQuery on Change 事件处理程序在 CoffeeScript 中不起作用

javascript - 如何在 jquery datepicker 中动态关闭日期?