这个问题与延迟加载有关。我阅读了帮助门户,但这是针对“一个控制器的情况”的。在那里声明,应在以下情况下实现延迟加载:
在实际使用案例中,您将对包含大量内容的选项卡执行此操作,或者触发对后端服务的昂贵服务调用。
但是没有提到如何触发控制器RouteMatched事件,因为.getTargets().display("name")
不会触发该事件。
之所以这样问,是因为Parent的本地视图JSON模型具有数据,这些数据是在Parent的Controllers _onObjectMatched函数(即this.sObjId= oEvent.getParameter("arguments").objectId;
)中收集的
嵌套控制器中需要的信息相同-单击Tab时使用这些参数发送GET请求。
也可以从Parent的ViewModel获取属性的解决方法。
我不想使用.navTo函数的onTabSelect事件-导致每次触发路由匹配的原因-因此,如果我在选项卡之间切换-发送了多个相同的GET。
非常感谢IconTabFilter如何与单独的控制器一起使用!
谢谢Shanir
答案 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);
}
它绕过了整个路由机制,所以如果有人有更好的解决方案,请纠正我。
最好, 马库斯