простое событие Backbone не срабатывает

У меня есть следующее представление, и я пытаюсь связать событие щелчка с кнопкой с идентификатором #add. Однако он даже не зарегистрирует функцию preventDefault.

var app = app || {};

app.LibraryView = Backbone.View.extend({
el: '#books',

events: {
    'click #add' : 'addBook'
},

initialize: function() {
    this.collection = new app.Library();
    this.render();
    this.listenTo( this.collection, 'add', this.renderBook);

},

render: function() {
    this.collection.each(function( item ) {
        this.renderBook( item );
    }, this );
},

renderBook: function( item ) {
    var bookView = new app.BookView({
        model: item
    });
    this.$el.append( bookView.render().el );
},

addBook: function(e) {
    e.preventDefault();
    var formData = {};
    $('#addBook div').children('input').each(function(index, el) {
      if($(el).val() != '') {
        formData[el.id] = $(el).val();
      }
    });

    this.collection.add(new app.Book(formData));
    console.log("book added");
}


});

Кроме того, я могу вызвать renderBook в консоли, и он добавит новый bookView, однако функция рендеринга, похоже, не работает при первоначальной загрузке страницы.

Вот мой html в нефрите.

block content
#books
  form#addBook(action'#')
    div
      label(for='coverImage').span5 Image URL:
      input#coverImage(type='text')
      label(for='title').span5 Title:
      input#title(type='text').span5
      label(for='author') Author:
      input#author(type='text').span5
      label(for='date') Date:
      input#date(type='text').span5
      label(for='tags') Tags:
      input#tags(type='text').span5
      button#add Add


.bookContainer
  ul
   li Title
   li Author
   li Date
  button Delete

person gh0st    schedule 23.02.2014    source источник
comment
извините, думаю, это проблема копирования/вставки с уценкой. #add содержится в div под #books   -  person gh0st    schedule 24.02.2014
comment
изменил его на ‹тип кнопки=кнопка›, что остановило перезагрузку страницы, но по-прежнему не регистрирует событие клика. Кроме того, не уверен, что это вообще связано, но я получаю 404 на backbone-min.map.   -  person gh0st    schedule 24.02.2014
comment
да, я почти уверен, что это так. Я вижу это в devtools, когда просматриваю элементы страницы. может ли организация моих файлов вызвать проблему, если html-файл, содержащий #books, организован следующим образом: jsfiddle.net /66HSU/1   -  person gh0st    schedule 24.02.2014


Ответы (1)


Вы должны создать экземпляр своего представления new app.LibraryView(), чтобы события вашего представления были привязаны.

person Rida BENHAMMANE    schedule 24.02.2014
comment
да, кажется, это оно. До этого момента я не создавал экземпляр LibraryView в своем файле app.js. Спасибо что подметил это. - person gh0st; 25.02.2014