Почему это не определено в методе объекта?
У меня есть объект loginView, который имеет 2 функции - initLogin и goAuth. Внутри этих методов я использую ключевое слово this. При использовании initLogin я устанавливаю значение для this.loginField и для некоторых других переменных, и все в порядке. Но когда я пытаюсь вызвать goAuth, он говорит, что this.loginField является "неопределенным параметром". Кстати, я вызываю initLogin до goAuth. Также, если я использую loginView.pane - все работает правильно.
Итак, почему это не работает в goAuth, но работает в initLogin?
Там код:
var loginView = {
pane: null,
hideButton: null,
exitButton: null,
loginField: null,
passwordField: null,
savePasswordBox: null,
enterButton: null,
registerButton: null,
forgotButton: null,
mask: null,
movePoint: null,
initLogin: function(){
this.pane = loadFXML("dialog/login.fxml");
LogHelper.info(this.pane==loginView.pane);
this.pane.setOnMousePressed(function(event){ loginView.movePoint = new javafx.geometry.Point2D(event.getSceneX(), event.getSceneY())});
this.pane.setOnMouseDragged(function(event) {
if(loginView.movePoint === null) {
return;
}
// Обновляем позицию панели
stage.setX(event.getScreenX() - loginView.movePoint.getX());
stage.setY(event.getScreenY() - loginView.movePoint.getY());
});
// Lookup hide & exit button
this.hideButton = this.pane.lookup("#hidebtn").setOnAction(function(event){ stage.setIconified(true)});
this.exitButton = this.pane.lookup("#exitbtn").setOnAction(function(event){ javafx.application.Platform.exit()});
// Lookup login field
this.loginField = this.pane.lookup("#logintf");
this.loginField.setOnAction(this.goAuth);
if (settings.login !== null) {
this.loginField.setText(settings.login);
}
// Lookup password field
this.passwordField = this.pane.lookup("#passwordtf");
this.passwordField.setOnAction(this.goAuth);
if (settings.rsaPassword !== null) {
this.passwordField.setPromptText("*** Сохранённый ***");
}
// Lookup save password box
this.savePasswordBox = this.pane.lookup("#rememberchb");
this.savePasswordBox.setSelected(settings.login === null || settings.rsaPassword !== null);
// Lookup action buttons
this.enterButton = this.pane.lookup("#enterbtn").setOnAction(this.goAuth);
this.registerButton = this.pane.lookup("#registerbtn").setOnAction(function(){openURL(config.registerURL)});
this.forgotButton = this.pane.lookup("#forgotbtn").setOnAction(function(){openURL(config.forgotURL)});
// Init overlays
//processing.initOverlay();
// Verify launcher & make request
//verifyLauncher();
},
goAuth: function()
// doesn't work, "loginField is undefined for this"
var login = this.loginField.getText();
// does work
//var login = loginView.loginField.getText();
if (login.isEmpty()) {
//TODO: some sort of exception
return;
}
// Get password if online-mode
var rsaPassword = null;
if (!this.passwordField.isDisable()) {
var password = this.passwordField.getText();
if (!password.isEmpty()) {
rsaPassword = settings.setPassword(password);
} else if (settings.rsaPassword !== null) {
rsaPassword = settings.rsaPassword;
} else {
return;
}
// Remember or reset password
settings.rsaPassword = this.savePasswordBox.isSelected() ? rsaPassword : null;
}
// Show auth overlay
settings.login = login;
doAuth(login, rsaPassword);
}
};