2

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

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

4

1 回答 1

6

您可以在此处找到传递给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 和 Table 绑定到同一个模型,因此字段的更新将同时更新两个控件。您尝试使用 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克里斯

于 2014-02-01T11:36:22.540 回答