2014-01-15 72 views
2

我有以下功能,這是對話的一部分(其中假設數據以與數據表中可以結合):數據從表到對話框+更新數據綁定從對話框表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}"使用"test" ID的模式,我想進入模型數據:

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

       this.model.setData({ 

        workorderdata: data 

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

的正常工作,但僅限於單一的文本字段。我如何更改參考"test>/workorderdata/0/scopeITRequestCode"以便更改動態,並且用戶可以更改所有文本字段?換句話說,如何將表中所選行的單元格的值與對話框中的文本字段的值綁定?

回答

5

你可以找到傳遞給rowSelectionChange事件這裏的參數: https://openui5.hana.ondemand.com/#docs/api/symbols/sap.ui.table.Table.html#event: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); 
} 

不幸的是,我不確定如何獲取型號名稱,但如果您在綁定中省略型號名稱並使用setModel而不是更具動態性,那麼您可能也會很好:

oDialog.setModel(oBindingContext.getModel()); 

由於TextField和表綁定的是相同的模型,所以字段的更新將更新這兩個控件。你試圖用TextField實現的是一個所謂的TwoWayBinding(從模型(OneWay)獲得一個值,並在改變時將它寫回(TwoWay)),例如, ODataModel不支持。這裏

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

更多細節上的綁定和綁定在此模式:你可以檢查這樣 https://openui5.hana.ondemand.com/#docs/guide/Introduction.1.html https://openui5.hana.ondemand.com/#docs/api/symbols/sap.ui.model.BindingMode.html https://openui5.hana.ondemand.com/#docs/api/symbols/sap.ui.model.Model.html#isBindingModeSupported

GL 克里斯

+1

解決了!謝謝 ! – user3189516

+0

好吧,你可以標記答案正確,如果它幫助:) – cschuff