2016-02-22 4 views
0

Это не вопрос относительно вложенных представлений, я прочитал учебники по этому вопросу, но они, похоже, не применимы к моей проблеме.SetElement Backbone.View не перемещает прослушиватели событий

Итак: у меня есть вид Backbone, который в своем методе render() создает абсолютно новый и независимый элемент через внешний модуль npm. Это не идеально, но быстрее, чем переписывать его самостоятельно. В пределах render() и после создания экземпляра нового элемента я вызываю this.setElement для привязки представления к вновь созданному элементу. Пока все хорошо, this.$el правильно обновлено.

Но я определил карту events, обработчики событий которой не перемещаются в новый $el. Почему это? Что я делаю не так?

Ich создал упрощенную суть: https://gist.github.com/4nduril/dab571e876b215e3786f

EDIT: Я редактировал скрипку Джеймс Akwuh к одному напоминающим моему коду: https://jsfiddle.net/ztwz3e3o/ Вы можете видеть, я вызываю метод визуализации в прослушивателя событий. Очевидно, эта скрипка работает. Поэтому я до сих пор не знаю, почему мой собственный код этого не делает.

Я буду продолжать копать.

+0

Я верю, что на этот вопрос ответят: http: //stackoverflow.com/questions/9586279/using-setelement-with-views-in-backbone ... возможно, дублирующий вопрос –

+0

Спасибо, но я не подумайте, что это та же проблема, что и у меня. Как я уже сказал, ссылка на это. $ El обновляется правильно, но слушателей событий нет. Если я не понимаю ваш намек, пожалуйста, уточните. – 4nduril

+0

Я думаю, что проблемы в том, что вы не можете установить el внутри render, потому что представление еще не было отображено, поэтому события не могут быть сохранены. Либо добавьте новые элементы в существующий элемент, который служит вашим el, либо попытайтесь сделать это после рендеринга. –

ответ

1

Угадай, что ты забыл позвонить render Функция.

Проверить работает JSFiddle.

+0

См. Мое редактирование исходного вопроса. – 4nduril

+0

@ 4nduril В вашем суставе слишком много опечаток. Кроме того, нет 'myClickHandler'. Пожалуйста, предоставьте полный код. Но в любом случае, в предоставленном JSFiddle вы могли видеть, что setElement работает отлично. –

+0

Да, сущности было недостаточно. Поэтому я разветвил вашу скрипку и связал ее в своем редактировании. ;) Но спасибо вам за ваш вклад. Я нашел решение: см. Мой собственный ответ. – 4nduril

0

Я нашел его, и я прошу прощения за не предоставление достаточной информации для всех вас, чтобы найти свою ошибку.

Функция обработчика, которую я попытался связать с

events: { 
    "click": "myHandler" 
} 

не был определен в пределах самого зрения (т.е. в Backbone.View.extend() -Call), но во внешней области. Так что, когда я изменил "click": "myHandler" к

"click": function() { 
    myHandler(); 
} 

он работал как шарм.

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