use*_*516 2 data-binding textfield 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);
}
Run Code Online (Sandbox Code Playgroud)
与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");
}
Run Code Online (Sandbox Code Playgroud)
哪个工作正常,但仅适用于单个文本字段.如何更改引用,"test>/workorderdata/0/scopeITRequestCode"
以便更改将是动态的,用户可以更改所有文本字段?换句话说,如何将表格中行的选定单元格的值与对话框中文本字段的值绑定?
您可以在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);
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我不确定如何获取模型名称,但如果省略绑定中的模型名称并使用setModel
更为动态的话,您可能也会很好:
oDialog.setModel(oBindingContext.getModel());
Run Code Online (Sandbox Code Playgroud)
由于TextField和Table绑定在同一模型上,因此该字段的更新将更新两个控件.你试图用TextField实现的是一个所谓的TwoWayBinding(从模型中获取一个值(OneWay)并在更改时将其写回(TwoWay)),例如ODataModel不支持.你可以这样检查:
myModel.isBindingModeSupported(sap.ui.model.BindingMode.TwoWay);
Run Code Online (Sandbox Code Playgroud)
有关绑定和绑定模式的更多详细信息,请访问: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克里斯
归档时间: |
|
查看次数: |
14181 次 |
最近记录: |