2014-11-11 2 views
0

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() { 

    }; 

}()); 

답변

3

당신은 그들이는 MatrixLayout의 집계에 버튼을 추가하면이 사용자 정의 컨트롤의 코드

onVirtualKeyboardClickBase : function(oEvent, oController){ 

    var virtualKeyboard = oEvent.getSource().disableButton("_btnMinus"); 
    } 

을 컨트롤의 집계에서 자동으로 제거됩니다. 집계 컨텐츠는 동시에 하나의 집계에만있을 수 있습니다. ID를 통해 액세스해야합니다. 이것이 UI5 Association이하는 것입니다 (기본적으로 컨트롤 인스턴스의 ID를 보유하는 그룹입니다).

관련 문제