Backbone.js / Coffeescript - отображение события простого клика - PullRequest
0 голосов
/ 25 ноября 2011

Я сталкиваюсь с мертвой зоной с backbone.js.Я написал этот код, и все, что я пытаюсь сделать, это заставить тестовый div отображаться при нажатии кнопки.Если я вызываю render() в функции initialize(), он рендерится.Однако я никогда не запускаю функцию 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 для простого просмотра

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()

Ответы [ 2 ]

1 голос
/ 28 июня 2012

То, что сказал Мариус, верно.

Обычно вы хотите указать events в определении класса, а не в инициализаторе.Фактически, для этого примера вам вообще не понадобится функция initialize:

class AppView extends Backbone.View

  events:
    'click button': 'render'

  render: ->
    @$el.html _.template SAMPLE_TEMPLATE, {}

$ ->
  new AppView el:$('#band-app')
0 голосов
/ 25 ноября 2011

Я думаю, что delegateEvents, который устанавливает обработку события, вызывается в конструкторе View до вызова initialize, поэтому либо вызовите его явно в вашем методе initialize (после того, как вы настроилиevents map) или убедитесь, что карта events настроена как часть построения самого класса View, см.

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

...