请原谅令人困惑的语言,但希望这是有道理的:(请参阅代码以获得更清晰的解释)
我要求显示"备件列表"在一个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,
});
谢谢, 马特
答案 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事件,这允许我安全地将渲染的模板项插入到我的可见表中。
很想知道更好的方法(可能使用模板控件或类似方法),但这可以解决问题。
干杯, 马特