2014-01-15 2 views
2

I가 (데이터가 데이터 테이블과 결합 할 가정) 대화의 일부입니다 다음과 같은 기능 :데이터 대화 상자에서 테이블에 대화 + 갱신 데이터를 테이블에서 바인딩 SAPUI5

handleChangeRow : function() { 

     var oTable = sap.ui.getCore().getElementById('WorkOrder'); 

     var oModel2 = oTable.getModel("test"); 

     //var oModel2 = oTable.getModel(); 

     console.log("oModel2 : " + oModel2); 

     var odata = oModel2.getProperty("/workorderdata"); 

     console.log("odata : " + odata); 
     var selIndex = oTable.getSelectedIndex(); 
     var selectedDataObject = odata[selIndex]; 

     var oDialog = new sap.ui.commons.Dialog("Dialog", { 
      modal : true, 
      closed : function(oControlEvent) { 
       sap.ui.getCore().getElementById('Dialog').destroy(); 
      } 
     }); 

     oDialog.setTitle("Change Work Order"); 
     var oLayout = new sap.ui.commons.layout.MatrixLayout({ 
      columns : 3, 
      width : "100%" 
     }); 

     var oTF = new sap.ui.commons.TextField("scopeITRequestCode", { 
      tooltip : 'ScopeIT Request Code', 
      editable : true, 
      width : '200px', 
      value: "{test>/workorderdata/0/scopeITRequestCode}" 
     }); 

     var oLabel = new sap.ui.commons.Label("lbscopeITRequestCode", { 
      text : 'ScopeIT Request Code', 
      labelFor : oTF 
     }); 

     oLayout.createRow(oLabel, oTF); 
} 

value: "{test>/workorderdata/0/scopeITRequestCode}"와 하지만 하나의 텍스트 필드에 대한 잘 작동

success : function(data) {   
       this.model = new sap.ui.model.json.JSONModel(); 

       this.model.setData({ 

        workorderdata: data 

       }); 
       sap.ui.getCore().setModel(this.model, "test"); 
} 

: 나는 모델 데이터로 얻으려고 노력하고있는 모델의 "test" ID를 사용하여. 참조 "test>/workorderdata/0/scopeITRequestCode"을 어떻게 변경하면 변경 사항이 동적으로 적용되며 사용자는 모든 텍스트 필드를 변경할 수 있습니까? 다른 단어로, 대화 상자에서 텍스트 필드의 값과 테이블에있는 행의 선택된 셀의 값을 바인딩하는 방법은 무엇입니까?

답변

5
당신은 여기 rowSelectionChange 이벤트에 전달 된 매개 변수를 찾을 수 있습니다

:

handleChangeRow : function(oEv) { 
     var oBindingContext = oEv.getParameter("rowContext"); 
     var oPath = oBindingContext.getPath(); 

     var oDialog = new sap.ui.commons.Dialog("Dialog", { 
      title : "Change Work Order", 
      modal : true, 
      closed : function(oControlEvent) { 
       sap.ui.getCore().getElementById('Dialog').destroy(); 
      } 
     }); 
     var oLayout = new sap.ui.commons.layout.MatrixLayout({ 
      columns : 3, 
      width : "100%" 
     }); 

     var oTF = new sap.ui.commons.TextField("scopeITRequestCode", { 
      tooltip : 'ScopeIT Request Code', 
      editable : true, 
      width : '200px', 
      value: "{test>"+ oPath +"/scopeITRequestCode}" 
     }); 
     var oLabel = new sap.ui.commons.Label("lbscopeITRequestCode", { 
      text : 'ScopeIT Request Code', 
      labelFor : oTF 
     }); 
     oLayout.createRow(oLabel, oTF); 
} 
: https://openui5.hana.ondemand.com/#docs/api/symbols/sap.ui.table.Table.html#event:rowSelectionChange

이 코드는 아마 다음과 같을 것이다 않는 그런 말을하고 대화를 가정하면 테이블보다 같은 모델에 결합 데

불행히도 모델 이름을 얻는 방법에 대해서는 확신 할 수 없지만 바인딩에서 모델 이름을 생략하고 조금 더 동적 인 대신 setModel을 사용하면 괜찮을 것입니다.

oDialog.setModel(oBindingContext.getModel()); 

동일한 모델에 대해 TextField와 표가 바인딩되어 있으므로 필드 업데이트로 두 컨트롤을 모두 업데이트합니다. TextField로 얻으려고하는 것은 소위 TwoWayBinding (모델에서 OneWay 값 가져 오기 및 변경시 다시 값 쓰기 (TwoWay))입니다. ODataModel은 지원하지 않습니다. 당신은 다음과 같이 확인할 수 있습니다

myModel.isBindingModeSupported(sap.ui.model.BindingMode.TwoWay); 

자세한 내용을 여기에 바인딩 여기 모드 바인딩에 : https://openui5.hana.ondemand.com/#docs/api/symbols/sap.ui.model.Model.html#isBindingModeSupported

https://openui5.hana.ondemand.com/#docs/guide/Introduction.1.html https://openui5.hana.ondemand.com/#docs/api/symbols/sap.ui.model.BindingMode.html는 GL 크리스

+1

해결! 고맙습니다 ! – user3189516

+0

글쎄, 당신은 올바른 도움을 요청하는 경우 대답을 표시 할 수 :) – cschuff

관련 문제