简体   繁体   English

类中javascript变量的范围

[英]scope of javascript variable in the class

inside click_save() method of Controller, this is not pointing to the controller instance, but instead it points to button instance 在Controller的click_save()方法内部,这不是指向控制器实例,而是指向按钮实例

How to get access to this. 如何获得此权限。 so it points to controller and I can do this.userModelDialog().method call 所以它指向控制器,我可以做到这一点。userModelDialog()。method调用

``` ```

// --- Controller manages/dispatches tasks of view and model
function Controller() {
  var controller = this;
  api = new API();
  var table = $('#table');
  this.userModelDialog = new UserModalDialog();

  $('button[data-type="edituser"]').on("click", function(e) {
    controller.click_button(this);
  });

  // Register the button handlers
  $.each(["save", "close", "copy", "delete", "reset"], function(index, id) {
    msg.clear();
    $("#" + id).click(controller["click_" + id]);
  });
}


$.extend(Controller.prototype, {
  click_user: function(id) {
    api.getUser(id)
      .done(function(data) {
        _.keys(data).forEach(function(property) {
          $('#' + property).val(data[property]);
        });
      })
      .fail(function(data) {
        alert('fail');
      });
    $('#userDetails').modal('show');
  },
  click_button: function(button) {
    var id = $(button).attr('data-id');
    this.click_user(id);
  },
  click_save: function(button) {
    this.userModelDialog.submit();
    msg.show({
      TYPE: 'success',
      MESSAGE: 'saved successfull!'
    });
    $('#userDetails').modal('hide');

  },
  click_new: function() {

  },
  click_copy: function() {

  },
  click_delete: function() {

  },
  click_reset: function() {

  },
  click_row: function(row) {
    var id = $(row).attr('data-uniqueid');
    this.click_user(id);
  },
  updateFromServer: function(data, callback) {
    msg.show(data);
    callback(data);
  }
});

``` ```

  // Register the button handlers
  $.each(["save", "close", "copy", "delete", "reset"], function(index, id) {
    msg.clear();
    var methodName = 'click_' + id;
    if (controller[methodName]) {
        $("#" + id).click(controller[methodName].bind(controller));
    } else {
        console.log('There is not method in class with name: ' + methodName);
    }
  });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM