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

我正在尝试熟悉CoffeeScript和backbone.js,而且我一定是缺少某些东西.

这个咖啡脚本:

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时,点击事件不会触发testHandler.

如果我将输出JavaScript更改为:

$(function() {
  var MyView,testHandler: function() {
      console.log("click handled");
      return false;
    }
  });
  view = new MyView({
    el: $('#test_container')
  });
  view.render;
});

删除调用(this)并附加$,一切正常工作.我失踪了什么

解决方法

(function () {}).call(this);

只是在指定接收器时立即调用匿名函数方法.它的工作方式基本相同:

this.method = function () {};
this.method();

$(function(){}),至少在jQuery中是缩写

$(document).ready(function () {})

当DOM树已经完全构造时运行给定的函数.这似乎是您的Backbone.View.extend函数正常工作的必要条件.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...