2012-05-18 3 views
0

я почти испробовали все, и даже точно скопировал пример: [здесь] [1]Backbone.js: Невозможно привязать события

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

Разделительный контейнер;

нагрузки

Мое событие связывании испытания;

el: '#container', 
     events: { 
      "click button": "render" 
     } 

Также;

el: '#container', 
    events: { 
     "click button#add": "render" 
    } 

И, наконец, это;

el: '#container', 
events: { 
      "click input[type=button]": "doSearch" 
     } 

Есть ли вероятность того, что я сделаю это неправильно. Кроме того, если я его заработаю, можно ли назначить событие click для каждой функции в div, указав их id вместо более общего «кнопка клика»: «render»?

ПРИМЕЧАНИЕ: Я не смог получить код html, завернутый в код тег.

+1

Я предпочитаю использовать функцию jquery 'on' для элементов, которые динамически добавляются в DOM после визуализации представления. Например, 'initialize: function() {this. $ El.on ('click', 'button', handler); } ' –

ответ

2

Ваша кнопка ввода дочерний элемент контейнера? Магистраль не будет находить элементы вне области действия элемента view.

Вы можете сделать «нажмите #add» при условии, что #add является дочерним элементом #container.

+0

Я позже установил 'el: body' для более общего подхода, но все еще не работал – Ali

+0

Можете ли вы опубликовать пример jsfiddle с немного большим количеством кода, чтобы узнать, что вы делаете? – JamesOR

1

Прежде всего, я предполагаю, что ваш код с точки зрения базовой линии, правильно?

Имеет ли контейнер #container в DOM? Я замечаю, что ваши примеры вызывают рендеринг при щелчке, но обычно рендеринг - это то, где люди помещают код, чтобы фактически отображать HTML-шаблоны.

delegateEvents документация на BackboneJS использует следующий вызов визуализации, как их пример:

render: function() { 
    $(this.el).html(this.template(this.model.toJSON())); 
    return this; 
    }, 

Обратите внимание, что до этого костров, пример бы технически не иметь ничего для вас нажать на кнопку.

Быстрый способ проверить это было бы запустить это в консоли после ваших приложений разжигает:

$("#container") 

Если это возвращает пустой «[]», то вы знаете, у вас есть проблемы. Второе, что нужно учитывать, это то, что оно действительно доступно для кликов (потому что, возможно, оно существует, но оно не доступно для кликов из-за его положения или размера).

Therefor, окончательное испытание было бы запустить это в консоли и попробуйте нажать на DIV:

$("#container").click(function() { alert('clicked');}); 
+0

Можно ли решить эту проблему без интеграции jquery. Я имею в виду просто определение событий в 'событиях: {}' не принесет пользы? – Ali

+0

Мое главное было для OP проверить правильность реализации (что есть элемент DOM с рендерингом ID #container). Его примеры показали, что ни один элемент этого идентификатора не может быть в DOM. Код, который я опубликовал, был всего лишь предложением о том, как устранить неполадки. Код рендеринга, который я опубликовал, был взят непосредственно из документации BackboneJS. OP может использовать любые другие рамки или образцы кода для создания HTML. BackboneJS не обрабатывает создание HTML, если вы вручную не сообщите ему об этом (как пример). Надеюсь, это прояснит ситуацию. –

Смежные вопросы