Как запускать функции в представлении Backbone

0

Я начал изучать Backbone.js Views, для моей практической цели я попробовал следующий код.

<body>
<div id="search_container"></div>
<input type="text" id="field"/>
<script type="text/javascript">
SearchView = Backbone.View.extend({
    initialize: function(){
        this.render();
    },
    render: function(){
        //var template = _.template( $("#search_template").html(), {data:'ggg'} );
        console.log(this.$el.attributes);
        $('#search_container').html(this.$el);
    },
    events: {
        "click #field": "doSearch"
    },
    doSearch: function( event ){
        console.log('ssss');
        alert('working!!');
    }
});
var search_view = new SearchView({el:"#field"});
</script>
</body>

Если вы наблюдаете мой код, я добавил текстовое поле в div.it работает отлично. Если вы нажмете на textField он не вызывает doSearch().

Как я могу это исправить.

  • 0
    Вы уверены, что идентификатор входа является field и находится внутри this.$el ? может быть, вы могли бы показать нам сгенерированный HTML :)
Теги:
backbone.js

2 ответа

0
Лучший ответ

То, что вы сделали, - это сокращенная форма делегатов. Этот метод использует jQuery.on под капотом, и ваш селектор будет фильтровать потомков текущего вида el, см. Backbone delegateEvents:

this.$el.on(eventName, selector, method);

Смотрите эту скрипку:

JSFiddle

0

Проблема здесь в #field не внутри, а в представлении $ el. Чтобы он работал, измените хэш

events: {
    "click": "doSearch"
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню