Как связать форму Backbone с событием? - PullRequest
2 голосов
/ 08 февраля 2012

Я пытаюсь реализовать простую форму входа в систему с помощью Backbone, используя библиотеку backbone-forms.

$(function() {
  var LoginUser = Backbone.Model.extend({
    schema: {
      username: { type: 'Text'   },
      password: { type: 'Text'   }
    },
    url: 'login_backbone_form'
  });

  var thisLogin = new LoginUser();

  var form = new Backbone.Form({
    model: thisLogin,
    events: {
      "click button#formButton"   :   "saveForm"
    },

    saveForm: function() {
      alert('hit saveForm');
      this.model.save();
    }
  }).render();

  window.form = form;
  $('#formHook').html(form.el);
  $('<button type="button" name="login" id="formButton">Login</button>')
     .appendTo('#formHook');
});

В моем HTML есть div с id = 'formHook', и на странице отображается формас кнопкой входа в систему.Но нажатие кнопки ничего не делает.

Что я здесь не так делаю?

1 Ответ

4 голосов
/ 09 февраля 2012

Первая проблема может заключаться в том, что ваша кнопка формы находится вне контекста представления формы.Когда вы присоединяете обработчики событий DOM к представлению, они будут реагировать только на элементы в этом представлении.Попробуйте встроить форму и кнопку в главное представление.

Вот код и он также находится в JSFiddle: http://jsfiddle.net/evilcelery/hsSru/

$(function() {
    var LoginUser = Backbone.Model.extend({
        schema: {
            username: {
                type: 'Text'
            },
            password: {
                type: 'Text'
            }
        },
        url: 'login_backbone_form'
    });

    var LoginView = Backbone.View.extend({
      events: {
          "click button#formButton": "saveForm"
      },

      initialize: function() {
        this.model = new LoginUser();
      },

      render: function() {
        var $button = $('<button type="button" name="login" id="formButton">Login</button>');

        this.form = new Backbone.Form({ model: this.model });

        this.$el.append(this.form.render().el);
        this.$el.append($button);

        return this;
      },

      saveForm: function() {
          this.form.commit();
          this.model.save();

          alert('hit saveForm');
          console.log(this.model.toJSON());
      }
    });

    window.loginView = new LoginView;
    $('#formHook').html(loginView.render().el);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...