类中javascript变量的范围

时间:2016-03-03 21:38:40

标签: javascript scope

Controller的click_save()方法,这不是指向控制器实例,而是指向按钮实例

如何访问此内容。所以它指向控制器,我可以这样做.userModelDialog()。方法调用

```

// --- 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);
  }
});

```

1 个答案:

答案 0 :(得分:0)

  // 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);
    }
  });