2015-07-16 1 views
1

Я создаю простую страницу с помощью CompositeView из марионеток, с шаблоном родительского lodash, который описывает группу шаблонов: по одному для каждого элемента в его коллекции.События не стреляя с марионетками

На странице отображаются должным образом, и каждый ItemView делает правильно с собственным шаблоном ребенка, но привязка «нажмите кнопку» событие не регистрируется в любой точке приложения, даже если переехал в CompositeView.

У меня есть подозрения, что это происходит из-за того, что события были связаны до создания элемента, и он не обновляется после этого. Из того, что я прочитал, он использует/использовал .live()/.on(), но я не вижу другой причины, по которой он не регистрировался.

Есть ли способ убедиться, что события восстанавливаются с onRender()? Я делаю что-то совсем не так?

окружающей среды: RequireJS, BabelJS (ES6), Backbone 1.1.2, кукольный 2.4.1, 1.10.2 JQuery

Я создал a gist of the code in question.

+3

Пожалуйста, отрегулируйте код до небольшой демонстрации и поместите его в вопрос. Пока вы отступаете в 4 пробела, SO сделает подсветку синтаксиса. Связывание с кодом в другом месте делает его гораздо менее вероятным, что люди собираются ответить. – loganfsmyth

ответ

3

Non ES6: Попробуйте назначить this.events перед родительский конструктор, в Backbone 1.2.1+ события создаются до initialize в родительском конструкторе. В 1.1.2 они создаются ПОСЛЕ initialize, но все же как последнее, что делает родительский конструктор, поэтому вы должны либо назначить их в initialize, либо сделать это перед супервызовом (я рекомендую перед супервызовом в конструкторе, так что если вы обновление не прерывается снова).

В ES6 вы не можете использовать this перед вызовом супер.

Вы можете позвонить по телефону this.delegateEvents();, но он не идеален, так как он прекращает прослушивание, а затем повторное прослушивание любых существующих событий, которые менее эффективны (хотя воздействие, вероятно, незначительно).

Свойство es7 static можно использовать в определении класса, если вы используете транспилятор, который его поддерживает (например, Babel), или создайте события, которые возвращают объект, если вам нужно, чтобы он был динамическим.

+0

Umm, используя 'this' forfor' super() 'вызов является синтаксической ошибкой. – Bergi

+0

Хорошая точка @ Берги, я обновлю ответ –