使用ODataModel映射sap.ui.table.Table中的几列?

时间:2014-09-11 06:44:34

标签: odata sapui5

我绑定了一个表的所有列,除了下拉的一个列。该表与模型(ODataModel)相关联,并且最后一列中的下拉内容都来自不同的模型,因为用户应该从下拉列表中选择一个项目,这是通过单击按钮提交的#39;保存'我在底部提供了。

我正在使用Paginator作为导航模式。问题是下拉列表显示当用户在页面之间切换时第一页的内容,因为它不依赖于表格模型中的任何字段。我想通过用户在页面之间切换来显示相应的更改,以反映在下拉列中。

对此有何建议?我知道有一些叫做RowRepeater的东西,使用它可以重复复杂的控件但是如果我想使用sap.ui.table.Table仍然会有什么方法呢?

请在下面找到我的代码:

createAssignResourcesTable: function(){ 
    var model = new sap.ui.model.odata.ODataModel("/sap/opu/odata/sap/ZSECENTRAL_SRV", true);
    var substituteRMCombo = sap.ui.getCore().byId("substituteRM");
    var selectedRM = substituteRMCombo.getSelectedKey();
    var jsonModel = new sap.ui.model.json.JSONModel();
    var resourceData = null;
    var readSuccess = function(responseData){
        resourceData = responseData;
        jsonModel.setData(resourceData);
    };
    var readError = function(){
        //console.log('some error occurred while reading data');
        sap.ui.commons.MessageBox.show("Some Error occurred while reading data",
                sap.ui.commons.MessageBox.Icon.ERROR,"Error!",[sap.ui.commons.MessageBox.Action.OK],
                function(){
                    //console.log('End Date should be grater than Start aDte!!!');
                    return;
            });
    };
     model.read("/RMResourceSet",null, null, true,readSuccess,readError);
    var template = new sap.ui.core.ListItem();
    //console.log(template);
    template.bindProperty("text","ChildbpName");
    template.bindProperty("key","Childbp");
    //console.log(template);
    var that = this;
    var table = new sap.ui.table.Table("assignResourcesTable",{
                   visibleRowCount: 6,
                   navigationMode: sap.ui.table.NavigationMode.Paginator,

                  columns:[
                           new sap.ui.table.Column("",{
                                label: new sap.ui.commons.Label({text:"Work Item"}),
                                template: new sap.ui.commons.Label().bindProperty("text", "DemoId"),
                                sortProperty: "DemoId",
                                filterProperty: "DemoId",
                                width: "auto"
                           }), new sap.ui.table.Column("",{
                                label: new sap.ui.commons.Label({text:"Requierd Date"}),
                                template: new sap.ui.commons.TextView().bindProperty("text", "ReqDate"),
                                sortProperty: "ReqDate",
                                filterProperty: "ReqDate",
                                width: "auto"
                           }),
                           new sap.ui.table.Column({
                               label: new sap.ui.commons.Label("",{
                                   text: "Estimated Hours"
                               }),
                               template: new sap.ui.commons.TextField("",{
                                   change:[{"name" : "DurEst"},that.onChangeAssignResourcesTable,that],
                                   value: "00015"
                               }).bindProperty("value","DurEst")
                           }),
                           new sap.ui.table.Column({
                               label: new sap.ui.commons.Label({text:"Demo Engineer"}),
                               template: new sap.ui.commons.ComboBox("",{
                                   change:[{"name" : "Childbp"},that.onChangeAssignResourcesTable,that]
                               }).setModel(jsonModel).bindItems("/results",template),
                               width: "auto"
                           })

                  ]
              });
    table.setBusyIndicatorDelay(1);
    var oModel = new sap.ui.model.odata.ODataModel("/sap/opu/odata/sap/ZSECENTRAL_SRV",true);
    oModel.attachRequestSent(function (oEvent) {
        //console.log('request sent');
         table.setBusy(true);
    });
    oModel.attachRequestCompleted(function () {
            //console.log('request completed');
            table.setBusy(false);
    });
    oModel.attachRequestFailed(function () {
              table.setBusy(false);
    });
    table.setModel(oModel);
    var FilterOperator = sap.ui.model.FilterOperator;
    var filter = new sap.ui.model.Filter("RmUser", FilterOperator.EQ, selectedRM);
    table.bindRows("/RMNONSTAFFEDDBRSet",null,null,[filter]);
    //table.bindRows("/RMNONSTAFFEDDBRSet",true);
    return table;
}

提前致谢!

1 个答案:

答案 0 :(得分:1)

您的ComboBox静态绑定jsonModel>结果。鉴于上面的代码,我认为你的ComboBox总是包含相同的项目。

我从您的问题中了解到,这些项目对于每一行或至少每一页都应该是动态的。由于表的行只能绑定到一个集合,因此您可以通过以下方式调整它:

  1. 创建一个新的JSONModel加入ODataModel中包含用于ComboBox创建的数据的数据,并将您的表格与此新模型绑定。

  2. 选项1肯定存在一些弱点,所以这是另一个:将ComboBox列与ODataModel的任何属性绑定,并使用formatter function动态创建ComboBox项,并从格式化程序返回。