oData绑定到表会在表输出中生成重复的行

时间:2018-01-10 04:25:53

标签: javascript odata sapui5

我有一个OData连接,使用它可以读取一个实体集,其条件可以返回以下结构中的数据。数据位于根节点本身而不是对象数组中 -

oData Structure

然后我将此数据设置为JSON模型并将此模型绑定到我的oTable。 控制器中的代码如下所示 -

//Get data for the table
var oTabData = sap.ui.getCore().byId("MyTable");
var sServiceUrl = "http://example.com/sap/opu/odata/SAP/ZXX_SRV";
var oModel2 = new sap.ui.model.odata.ODataModel(sServiceUrl,true);
var oJsonModel = new sap.ui.model.json.JSONModel();
oModel2.read("/MyEntitySet(Myvar1='000001',Myvar2='abc')?
$format=json",null,null,true,function(oData,response){  
        oJsonModel.setData(oData);
    });
oTabData.setModel(oJsonModel);

视图包含表格,绑定如下。忽略了其余的表声明代码以保持简短。使用id MyTable和所有正确的列声明为oTable的表 -

//Template to map the data to the respective column
var template = new sap.m.ColumnListItem({
    id:"table_template",
    type: "Navigation",
    visible: true,
    cells:[
        new sap.m.Label({
            text: "{/Myvar1}"
        }),
        new sap.m.Label({
            text: "{/Myvar2}"
        }),
        new sap.m.Label({
            text: "{/Myvar3}"
        }),
        new sap.m.Label({
            text: "{/Myvar4}"
        })
    ]
});

var oFilters = null;
oTable.bindItems("/",template,null,oFilters);

问题是 -

  1. 因为我已经使用条件oData输出进行了服务调用 接收不会像我们制作时那样输出数据数组 没有条件的电话 (oModel2.read("/MyEntitySet?$format=json",null,null,true,function(oData,response))。 在后一种情况下,输出属于结果数组 绑定赋值是/ results,并且按预期正常工作。
  2. 在当前情况下(带条件的服务调用),作为列中的列 输出在根级别可用,已使用绑定 / 在模板中以及在每个元素前面使用 / (例如 {/Myvar1}如上所示)。但是使用这种技术它也创造了3 最初表中的默认空行。当上面的控制器 代码被执行,它填充表3 x 4次,即12行为a 单行输出。
  3. 由于组织限制,我无法在此处输入原始代码。但这就是场景的方式。任何帮助将不胜感激。

    感谢。

    PS:没有使用任何会产生重复行的循环。

1 个答案:

答案 0 :(得分:0)

您可以直接将表格绑定到ODataModel:

步骤:

  1. 在进行绑定之前,您需要在sap.m中为表行创建一个模板。它是 ColumnListItem 控件,我建议执行它到 XML片段。尝试尽可能使用XML进行标记,因为它比js编码更清晰,更稳定; "细胞中的所有对照"应该绑定到行#39;使用相对路径的属性。
  2. 通过调用" oView.setModel(MODEL_INSTANCE)"告诉有关模型的视图,通过此行将默认模型设置为视图。从现在开始,内部的所有控件都能够看到它。该模型是默认的,因为未指定它的名称。
  3. oTable.bindItems(" / MyEntitySet",{template:oColumnListItem,filters:aFilters}); - 这将自动触发OData调用以获取所有需要的数据。该表将自动更新。你应该看到行。