使用不可见表上的模板插入现有的绑定sap.m.Table

时间:2014-12-04 10:00:32

标签: sapui5

请原谅令人困惑的语言,但希望这是有道理的:(请参阅代码以获得更清晰的解释)

我要求显示"备件列表"在一个sap.m.Table,但有能力,如果其中一个"备件"有一个相关的"备件" (例如重型版本,轻型版本等),您可以单击该行上的按钮并显示这些相关的"备件"将它们直接插入"备件"问题。

虽然我可以让sap.m.Table做我想做的事情,但我想利用模板和绑定来创建一个临时的sap.m.Table;将它绑定到返回这些备用备件的关系;并重用一行的模板给我一个ColumnListItems数组,我可以在正确的位置插入表中。

不幸的是,这样做,sap.m.Table有一个功能,如果它没有显示,它实际上并没有进行Odata调用并利用模板功能。

为了解释可能更清楚,请参阅此jsbin: http://jsbin.com/sihofu/4/edit?html,js,output

关于如何在不使用sap.m.Table的情况下为绑定生成模板输出的任何更好的想法;或者替代方案,让sap.m.Table拨打电话而不将其放在屏幕上(暂时)?

要查看的具体代码如下:

var oTable2 = new sap.m.Table();
oTable2.attachUpdateFinished(function() { 
  console.log("But this one doesn't");
  // What I'm trying to do here is insert these entries below Key 1
});

oTable2.bindAggregation("items", {
  path: "/ExampleSecondaryValues",
  template: oTemplate,

  }); 

谢谢, 马特

1 个答案:

答案 0 :(得分:0)

现在从假期回来,通过简单地增强/扩展sap.m.table控件,有点蛮力解决了这个问题。

问题在于控件是不可见的,没有渲染,UI5核心内的一些优化意味着在没有渲染任何内容的情况下,未在控件上调用AfterRender事件,此事件触发UpdateFinished事件。

我不肯辩论这种优化是否合适,但为了解决这个问题,我只是使用一个新的控件来扩展表控件,如下所示:

sap.m.Table.extend("my.InvisibleTable", { 
    renderer: function(oRm, oControl) { 
      oRm.write("<span"); 
      oRm.writeControlData(oControl);
      oRm.write("></span>");
    }
});

e.g。只需在渲染函数中渲染一些东西,就会调用AfterRender事件;这反过来允许sap.m.Table触发UpdateFinished事件,这允许我安全地将渲染的模板项插入到我的可见表中。

很想知道更好的方法(可能使用模板控件或类似方法),但这可以解决问题。

干杯, 马特