具有独立控制器的SAPUI5 IconTab可处理延迟加载

时间:2018-12-12 09:38:57

标签: sapui5

这个问题与延迟加载有关。我阅读了帮助门户,但这是针对“一个控制器的情况”的。在那里声明,应在以下情况下实现延迟加载:

  

在实际使用案例中,您将对包含大量内容的选项卡执行此操作,或者触发对后端服务的昂贵服务调用。

但是没有提到如何触发控制器RouteMatched事件,因为.getTargets().display("name")不会触发该事件。

之所以这样问,是因为Parent的本地视图JSON模型具有数据,这些数据是在Parent的Controllers _onObjectMatched函数(即this.sObjId= oEvent.getParameter("arguments").objectId;)中收集的 嵌套控制器中需要的信息相同-单击Tab时使用这些参数发送GET请求。

也可以从Parent的ViewModel获取属性的解决方法。

我不想使用.navTo函数的onTabSelect事件-导致每次触发路由匹配的原因-因此,如果我在选项卡之间切换-发送了多个相同的GET。

非常感谢IconTabFilter如何与单独的控制器一起使用!

谢谢Shanir

1 个答案:

答案 0 :(得分:1)

有点晚了,但是:我也无法通过路由解决此问题,attachDisplay没有帮助,因为它没有上下文信息。 因此,我使用了EventBus并奏效了:

在您的详细信息控制器中,bind方法:

this.getView().bindElement({
  path: ...,
  events: {
    dataReceived: function () {
     sap.ui.core.Component.getOwnerComponentFor(that.getView()).getEventBus().publish(
                            "BindingDone", {
                                oContext: that.getView().getBindingContext()
                            }
                        );
                    }

然后在您的控制器中获取IconTabBar内容:

onInit: function () {
            var oEventBus = sap.ui.core.Component.getOwnerComponentFor(this.getView()).getEventBus();
            oEventBus.subscribe(
                "BindingDone",
                this.onBinding,
                this
            );
        },

onBinding: function (sChannelId, sEventId, oData) {
            this.getView().setBindingContext(oData.oContext);
        }

它绕过了整个路由机制,所以如果有人有更好的解决方案,请纠正我。

最好, 马库斯