Backbone.js / Coffeescript——映射简单的点击事件



我遇到了一个盲点与backbone.js。我写了这段代码,我要做的就是得到要在按钮单击时呈现的测试div。如果我在initialize()函数中调用render(),它就会渲染。然而,我从来没有触发render()函数响应点击事件。

我错过了什么?

谢谢!

HTML容器
<!DOCTYPE html>
<html>
  <head>
    <meta charset='utf-8' />
    <!-- / Always force latest IE rendering engine (even in intranet) & Chrome Frame -->
    <meta content='IE=edge,chrome=1' />
    <meta http-equiv='X-UA-Compatible' />
    <link type="text/css" rel="stylesheet" href="/stylesheets/site.css" media="screen" />
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script>
    <script type="text/javascript" src="/javascripts/underscore-min.js"></script>
    <script type="text/javascript" src="/javascripts/backbone-min.js"></script>
    <script type="text/javascript" src="/javascripts/application.js"></script>
    <script type="text/javascript" src="/javascripts/sample_data.js"></script>
    <title>The Middleman!</title>
  </head>
  <body class='page_classes'>
    <div id='main' role='main'>
      <h1>The Middleman is watching.</h1>
      <div id='band-app'>
        <button id='new-band'>new band</button>
      </div>
    </div>
  </body>
</html>

Coffeescript for simple view

SAMPLE_TEMPLATE = """
<div id="my-fine-id">
  My fine id!!!
</div>
"""
$ ->
  class AppView extends Backbone.View
    render: ->
      console.log "rendering"
      @template = _.template SAMPLE_TEMPLATE, {}
      @el.html @template
    initialize: ->
      console.log "constructing"
      @el = $('#band-app')
      @events = {"click button#new-band": "render"}
  app = new AppView()

马吕斯说得对。

通常您希望在类定义中指定events,而不是在初始化器中指定。实际上,对于本例,您根本不需要initialize函数:

class AppView extends Backbone.View
  events:
    'click button': 'render'
  render: ->
    @$el.html _.template SAMPLE_TEMPLATE, {}
$ ->
  new AppView el:$('#band-app')

我认为delegateEvents,它设置事件处理,在initialize被调用之前,在View构造函数中调用,因此要么在initialize方法中显式调用它(在您设置了events映射之后),要么确保events映射被设置为构建View类本身的一部分,参见:

http://documentcloud.github.com/backbone/View-extend

最新更新