Data binding 从表到对话框的数据绑定+;将数据从对话框更新到表SAPUI5

Data binding 从表到对话框的数据绑定+;将数据从对话框更新到表SAPUI5,data-binding,textfield,sapui5,Data Binding,Textfield,Sapui5,我有以下函数,它是对话框的一部分(其中数据应该与数据表绑定): 使用值:“{test>/workorderdata/0/scopeITRequestCode}”使用“test”我试图获取模型数据的模型id: success : function(data) { this.model = new sap.ui.model.json.JSONModel(); this.model.setData({

我有以下函数,它是对话框的一部分(其中数据应该与数据表绑定):

使用
值:“{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”
,这样更改将是动态的,用户可以更改所有文本字段?换句话说,如何将表中行的选定单元格的值与对话框中文本字段的值绑定

您可以在此处找到传递给
rowSelectionChange
事件的参数:

话虽如此,假设dialog绑定到的模型与表绑定的模型相同,那么代码可能如下所示:

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);
}
myModel.isBindingModeSupported(sap.ui.model.BindingMode.TwoWay);
不幸的是,我不确定如何获取模型名,但如果您在绑定中省略模型名,并使用
setModel
来更具动态性,您可能也会很好:

oDialog.setModel(oBindingContext.getModel());
由于TextField和Table绑定在同一个模型上,因此字段的更新将更新这两个控件。您试图通过TextField实现的是所谓的双向绑定(从模型中获取值(单向),并在更改时将其写回(双向)),例如ODataModel不支持这种绑定。您可以这样检查:

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);
}
myModel.isBindingModeSupported(sap.ui.model.BindingMode.TwoWay);
有关绑定和绑定模式的更多详细信息,请参见:

德国劳埃德船级社
克里斯

好吧,你可以把答案记下来,如果有帮助的话问对了:)