Backbone.js Просмотр событий не стрельба - PullRequest
0 голосов
/ 03 апреля 2012

У меня проблемы с запуском событий просмотра моего backbone.js.Когда я нажимаю # кнопку входа, ничего не происходит.

Я также использую iCanHaz (http://icanhazjs.com/) для загрузки шаблонов.

Вот мой JavaScript:

$(function() {
 var router = new App.Router;
 Backbone.history.start();
});

App.Router = Backbone.Router.extend({
 routes: {
    "login": "login"
 },

login: function() {
    var view = new App.Views.LoginView;
 }
});

App.Views.LoginView = Backbone.View.extend({

 el: '#login',

 initialize: function() {

    _.bindAll(this, 'render', 'validateLogin');
    this.render();

 },

 render: function() {
    App.Stage.html(ich.loginView());
 },

 events: {
    'click button#login-button' : 'validateLogin'
 },

 validateLogin: function(event) {
     console.log("validateLogin fired.");
 }

});

Вот моя разметка (с использованием ICanHaz.js):

<script id="loginView" type="text/html">
        <div data-role="page" id="login" class="container">
            <div class="hero-unit">
                <div class="row-fluid">
                    <div class="span12">
                        <div class="form-horizontal">
                        <fieldset>
                            <legend>Please login to continue</legend>
                            <div class="control-group">
                            <label class="control-label" for="username">Username</label>
                            <div class="controls">
                                <input type="text" class="input-xlarge" id="username">
                            </div>
                            </div>

                                <div class="control-group">
                            <label class="control-label" for="password">Password</label>
                            <div class="controls">
                                <input type="password" class="input-xlarge" id="password">
                            </div>
                            </div>

                                <div class="form-actions">
                        <button id="login-button" class="btn btn-primary btn-large">Login</button>
                    </div>
                        </fieldset>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </script>

Ответы [ 2 ]

4 голосов
/ 03 апреля 2012

Я понял это. Магистраль связывала события с el до его создания. В обратном вызове для асинхронного вызова iCanHaz я использовал this.setElement ('# login'), и он работал отлично. Из документации backbone.js:

setElement [view.setElement(element)]

"Если вы хотите применить представление Backbone к другому элементу DOM, используйте setElement, который также создаст кэшированную ссылку $ el, и переместите делегированные события представления из старого элемента в новый".

0 голосов
/ 03 апреля 2012

Я полагаю, что вы неправильно используете свойство представления 'el'. Попробуйте, чтобы свойство ссылалось на объект DOM jQuery, а не только на идентификатор, как показано ниже:

App.Views.LoginView = Backbone.View.extend({

 el: $('#login')

...
...