Backbone JS: this. $ El undefined для другой функции значения ключа (Backbone.View) - PullRequest
1 голос
/ 21 января 2020

У меня есть такой код в JavaScript:

var addModalView = Backbone.View.extend({
      tagName:"div",
      el:$("#addemployee"),
      showbutton:$("#addemployee_button"),
      showbutton_click:function(e) {
          this.$el.modal("show"); // this.$el is undefined and not working
      },
      initialize:function() {
        this.showbutton.on("click", this.showbutton_click);
        this.$el.modal("show"); // this.$el is defined and working
      }
  });
myaddModalView = new addModalView();

Почему this.$el определен и работает при инициализации, но не с другим индексом ключа (showbutton_click)?

Ответы [ 2 ]

1 голос
/ 21 января 2020

Правильная реализация должна быть такой, используя events га sh.

var addModalView = Backbone.View.extend({
  el: $("#addemployee"), // should be avoided if possible
  events: {
    'click #addemployee_button': 'showbutton_click'
  },
  initialize: function() {
    this.$el.modal("show");
  },
  showbutton_click: function(e) {
    this.$el.modal("show");
  },
});

myaddModalView = new addModalView();

Если по какой-то причине #addemployee_button не находится внутри "#addemployee", то привязка события должна происходить в какой бы вид он ни содержал.

0 голосов
/ 21 января 2020

Я уже решил проблему, все, что мне нужно, это связать магистральный объект при инициализации.

var addModalView = Backbone.View.extend({
      tagName:"div",
      el:$("#addemployee"),
      showbutton:$("#addemployee_button"),
      showbutton_click:function(e) {
          this.$el.modal("show"); // this.$el is now defined and working
      },
      initialize:function() {
        this.showbutton.on("click", this.showbutton_click);
        _.bindAll(this, "showbutton_click"); // bind it first on showbutton_click
        this.$el.modal("show"); // this.$el is defined and working
      }
  });
myaddModalView = new addModalView();

Этот код связывания является решением и должен быть добавлен в initialize: _.bindAll(this, "showbutton_click");, чтобы вы могли вызовите магистральный объект внутри переменных пользовательских функций, используя ключевое слово this.

...