События просмотра Backbone.js не запускаются - PullRequest
1 голос
/ 27 марта 2012

Я следил за многочисленными снимками экрана, а также многократно просматривал основную документацию, и я не могу понять, почему события моего представления не запускаются.Мой (короткий) код для тестирования выглядит следующим образом:

<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="js/underscore.min.js"></script>
<script type="text/javascript" src="js/backbone.min.js"></script>

<script type="text/javascript">

    var App = (function($){

        var NavigationItemView = Backbone.View.extend({
            el: '#navigation',
            initialize: function(params){
                this.label = params.label;
                this.appendTo = params.appendTo;
            },
            events: {
                "click #add" : "test"
            },
            test: function(){
                $(this.el).html("<li>Testing...</li>");
            },
            render: function(){
                $(this.el).html("<li><a href=\"#\">"+this.label+"</a></li>");
            }
        })

        var self = {};
        self.init = function(){
            new NavigationItemView({ label: 'Test Nav Label' });
        }

        return self;
    });

    $(document).ready(function(){
         App(jQuery).init();
    })

</script>

Если я изменю код метода init из этого:

new NavigationItemView({ label: 'Test Nav Label' })

На это:

new NavigationItemView({ label: 'Test Nav Label' }).render()

Метод рендеринга вызывается идеально, указывая на то, что нет никаких проблем с настройкой представления.Я могу заменить render () на test (), и он тоже работает.

Однако событие нажатия на ссылку с идентификатором #add не запускает даже тест, и, конечно же, должно?Чтобы уточнить, у меня есть ссылка с идентификатором «добавить» в DOM, я проверил и проверил еще раз.

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

Я просмотрел соответствующие посты, и большинство предложений касалось использования свойства el , которое есть у меня.#navigation - пустое место в моем случае.Я изменил его на div, но без изменений в поведении.

Вся помощь очень ценится.

1 Ответ

3 голосов
/ 27 марта 2012

Является ли ваш элемент #add дочерним по отношению к вашему элементу представления (#navigation)? События запускаются только на дочерние элементы вашего представления "el". Например, это не будет работать:

<div id="navigation">
    ...
</div>

<div id="add">
    ...
</div>

Пока это будет:

<div id="navigation">
    ...
    <div id="add">
        ...
    </div>
    ...
 </div>
...