sapui5에서 사용자 정의 컨트롤을 작성했습니다. 그것의 가상 키보드 (화면 키보드) MatrixLayout 및 집합으로 많은 버튼을 가지고. 컨트롤에 "public"함수를 추가하여 일부 버튼을 비활성화 할 수 있도록해야합니다. 그러나이 함수 내에서 액세스하려고하면 MatrixLayout-Aggregation을 제외한 모든 집계가 null입니다.SAPUI5 사용자 정의 컨트롤 getAggregation()이 null입니다.
내 집계 (버튼)에 액세스하는 방법을 누군가가 도와 줄 수 있습니까? 나는 그것을 공개적이고 숨김으로써 시도했다. 그런 다음 생성 된 접근자를 볼 수 있지만 "null"도 반환합니다. "_layout"집계를 가져 오려고하면 MatrixLayout이 반환됩니다.
내가 이런 식으로 접근하는 것을 시도하고있다 :
(function() {
"use strict";
jQuery.sap.declare("de.vw.timerec.controls.VirtualKeyboard");
$.sap.includeStyleSheet("css/VirtualKeyboard.css");
jQuery.sap.require("sap.ui.commons.Button");
sap.ui.core.Control.extend("de.vw.timerec.controls.VirtualKeyboard", {
// the control API:
metadata : {
properties : {
/* Business Object properties */
"title" : {type : "string"},
"width" : {type: "sap.ui.core.CSSSize", defaultValue: "253px" },
"buttonWidth" : {type: "sap.ui.core.CSSSize", defaultValue: "57px" },
"buttonHeight" : {type: "sap.ui.core.CSSSize", defaultValue: "57px" }
},
aggregations : {
"_layout" : {type : "sap.ui.commons.layout.MatrixLayout", multiple : false, visibility: "hidden"},
"_btn1" : {type : "sap.ui.commons.Button", multiple : false, visibility: "hidden"},
"_btn2" : {type : "sap.ui.commons.Button", multiple : false, visibility: "hidden"},
"_btn3" : {type : "sap.ui.commons.Button", multiple : false, visibility: "hidden"},
"_btnDel" : {type : "sap.ui.commons.Button", multiple : false, visibility: "hidden"},
"_btn4" : {type : "sap.ui.commons.Button", multiple : false, visibility: "hidden"},
"_btn5" : {type : "sap.ui.commons.Button", multiple : false, visibility: "hidden"},
"_btn6" : {type : "sap.ui.commons.Button", multiple : false, visibility: "hidden"},
"_btnAlpha" : {type : "sap.ui.commons.Button", multiple : false, visibility: "hidden"},
"_btn7" : {type : "sap.ui.commons.Button", multiple : false, visibility: "hidden"},
"_btn8" : {type : "sap.ui.commons.Button", multiple : false, visibility: "hidden"},
"_btn9" : {type : "sap.ui.commons.Button", multiple : false, visibility: "hidden"},
"_btnBack" : {type : "sap.ui.commons.Button", multiple : false, visibility: "hidden"},
"_btn0" : {type : "sap.ui.commons.Button", multiple : false, visibility: "hidden"},
"_btnComma" : {type : "sap.ui.commons.Button", multiple : false, visibility: "hidden"},
"_btnMinus" : {type : "sap.ui.commons.Button", multiple : false, visibility: "public"},
"_btnNext" : {type : "sap.ui.commons.Button", multiple : false, visibility: "hidden"}
},
associations: { },
events : {
click : {enablePreventDefault : true}
}
},
init : function() {
var oControl = this;
var oMatrixLayout;
var oBtn1, oBtn2, oBtn3, oBtnDel, oBtn4, oBtn5, oBtn6, oBtnAlpha,
oBtn7, oBtn8, oBtn9, oBtnBack, oBtn0, oBtnComma, oBtnMinus, oBtnNext;
oMatrixLayout = new sap.ui.commons.layout.MatrixLayout({
id : this.getId() + "-matrixLayout",
layoutFixed : true,
columns : 4,
width : "100%"
});
this.setAggregation("_layout", oMatrixLayout);
oBtn1 = this._createButton("1", "1", oControl, true);
this.setAggregation("_btn1", oBtn1);
oBtn2 = this._createButton("2", "2", oControl, true);
this.setAggregation("_btn2", oBtn2);
oBtn3 = this._createButton("3", "3", oControl, true);
this.setAggregation("_btn3", oBtn3);
oBtnDel = this._createButton("", "delete", oControl, false);
oBtnDel.setIcon("sap-icon://undo");
this.setAggregation("_btnDel", oBtnDel);
oMatrixLayout.createRow(oBtn1, oBtn2, oBtn3, oBtnDel);
oBtn4 = this._createButton("4", "4", oControl, true);
this.setAggregation("_btn4", oBtn4);
oBtn5 = this._createButton("5", "5", oControl, true);
this.setAggregation("_btn5", oBtn5);
oBtn6 = this._createButton("6", "6", oControl, true);
this.setAggregation("_btn6", oBtn6);
oBtnAlpha = this._createButton("Alpha", "alpha", oControl, false);
this.setAggregation("_btnAlpha", oBtnAlpha);
oMatrixLayout.createRow(oBtn4, oBtn5, oBtn6, oBtnAlpha);
oBtn7 = this._createButton("7", "7", oControl, true);
this.setAggregation("_btn7", oBtn7);
oBtn8 = this._createButton("8", "8", oControl, true);
this.setAggregation("_btn8", oBtn8);
oBtn9 = this._createButton("9", "9", oControl, true);
this.setAggregation("_btn9", oBtn9);
oBtnBack = this._createButton("", "back", oControl, false);
oBtnBack.setIcon("sap-icon://arrow-top");
this.setAggregation("_btnBack", oBtnBack);
oMatrixLayout.createRow(oBtn7, oBtn8, oBtn9, oBtnBack);
oBtn0 = this._createButton("0", "0", oControl, true);
this.setAggregation("_btn0", oBtn0);
oBtnComma = this._createButton(",", ",", oControl, true);
this.setAggregation("_btnComma", oBtnComma);
oBtnMinus = this._createButton("-", "-", oControl, true);
this.setAggregation("_btnMinus", oBtnMinus);
oBtnNext = this._createButton("", "next", oControl, false);
oBtnNext.setIcon("sap-icon://arrow-bottom");
this.setAggregation("_btnNext", oBtnNext);
oMatrixLayout.createRow(oBtn0, oBtnComma, oBtnMinus, oBtnNext);
},
onAfterRendering: function() {
},
_createButton : function (text, buttonValue, oControl, isDigitButton) {
var styleClassName = "virtualKeyboardButtonDigit";
if (!isDigitButton) styleClassName = "virtualKeyboardButtonSpecial";
var buttonIdHelper = buttonValue;
if (buttonValue == ",") {
buttonIdHelper = "comma";
}
if (buttonValue == "-") {
buttonIdHelper = "minus";
}
var buttonId = this.getId() + "virtualKeyboardButton_" + buttonIdHelper;
var oBtn = new sap.ui.commons.Button({
id: buttonId,
text: text,
width: this.getProperty("buttonWidth"),
height: this.getProperty("buttonHeight"),
press: function (oEvent) {
oControl.fireClick({
buttonValue : buttonValue
});
}
}).addStyleClass("virtualKeyboardButton " + styleClassName);
return oBtn;
},
disableButton : function (buttonName)
{
// this.getAggregation(<any button aggregation>) returns "null"
// this.getAggregation("_layout") returns the MatrixLayout-Aggregation
this.getAggregation(buttonName).setEnabled(false);
},
renderer : {
render : function(oRm, oControl) {
oRm.write("<div");
oRm.writeControlData(oControl);
oRm.addStyle("width", oControl.getWidth());
oRm.addStyle("margin-left", "44px");
oRm.writeStyles();
oRm.write(">");
oRm.renderControl(oControl.getAggregation("_layout"));
oRm.write("</div>");
}
}
});
de.vw.timerec.controls.VirtualKeyboard.prototype.exit = function() {
};
}());