Backbone Просмотр событий не стреляет - PullRequest
19 голосов
/ 18 июня 2011

Я использую Rails3 в качестве бэкенда и Jammit для ресурсов ... Теперь я пытаюсь не сжимать и даже не упаковывать задницы.

Простое событие не запускается, но предупреждение ('asd') int inialize работает, как и ожидалось.

Я уже пробовал другие виды событий в других объектах, но это не сработало.

Мой код следующий:

var InvoiceStock = Backbone.View.extend({
  initialize: function(args) {
    _.bindAll(this, 'find_product', 'product_added');

    this.products = new ProductCollection();

    this.products.bind('add', this.product_added);

    alert('asd');
  },

  events: {
    "keypress #product_finder": "find_product"
  },

  find_product: function(e) {
    alert('teste');
  },

  product_added: function(product) {
    alert('pqp4');
  }
});

и мой рубиновый HTML:

 <%= text_field 'search', :isbn_or_isbn10_or_publisher_or_authors_or_name_like, :id => 'product_finder' %> ou
 <%= link_to 'criar um produto', '', :id => 'new_product_link' %>.

, который генерирует это:

<label>Adicionar</label>
<input id="product_finder" class="ui-autocomplete-input" type="text" size="30" name="search[isbn_or_isbn10_or_publisher_or_authors_or_name_like]" autocomplete="off" role="textbox" aria-autocomplete="list" aria-haspopup="true">
ou
<a id="new_product_link" href="">criar um produto</a>

1 Ответ

57 голосов
/ 18 июня 2011

Магистральные представления происходят в контексте элемента.Чтобы этот код работал, вы должны назначить этот элемент представлению во время создания, например, так:

var InvoiceStock = Backbone.View.extend({
    el: $('#product_finder').parent()

...

Или назначить el конкретный объект DOM, содержащий искатель продукта.В качестве альтернативы, вы можете генерировать элемент динамически и использовать jQuery для подключения его к вашей DOM.Я использовал оба.

Backbone использует делегат jQuery для определения и контекстуализации своих событий.Если вы не указали родительский элемент для всего представления, Backbone неправильно назначит менеджер событий.

...