由于控制器实例化,SAPUI5发布后订阅问题



ProjectInfo:在WebIDE 中使用Master/Detail Fiori模板构建应用程序

我的详细信息页面上有一个列表,当选中时,每个项目都应该链接到应用程序详细信息部分的新视图。

Detail.controller.js:

onInspectionSelect : function(oEvent) {
var oBindingContext = oEvent.getParameter(
"listItem").getBindingContext();
this.getEventBus().publish("InspectionDetails", "Context", { context : oBindingContext} );
this.getRouter().myNavToWithoutHash({
currentView : this.getView(),
targetViewName : "DOHMH.view.InspectionDetails",
targetViewType : "XML",
transition : "slide"
}); },

我的InspectionDetails.controller.js:

onInit : function() {
var bus = sap.ui.getCore().getEventBus();
bus.subscribe("InspectionDetails", "Context", this._inspection, this);
},
_inspection : function (channelId, eventId, data) {
if (data && data.context) {
this.getView().setBindingContext(data.context);
var sEntityPath = data.context.getPath();
this.bindView(sEntityPath);
}
},

当我第一次从详细信息页面选择列表项时,它不起作用,因为在选择事件触发发布时,InspectionDetails.controller没有订阅。

不幸的是,我不知道如何正确构建它,也不知道如何提前实例化控制器以避免错过第一个调用。

要在细节中实例化控制器,控制器不起作用:jQuery.sap.request("DOMH.view.InvectionDetails");(返回404),因为它不知道是在获取InspectionDetails.view.xml还是InspectionDetails.controller.js

已解决-感谢所有帮助!

还找到了一个视频解决方案:https://open.sap.com/courses/fiux1/items/3gZjaL857KYu6MYA06dJEs#66

为什么这么复杂?将InspectionDetails视图附加到特定路由,并在回调中设置其绑定上下文。当然,你必须将你的路线扩展到InspectionDetails,因为你需要传递一个ID或任何你想显示的实体。

我会将subscribe调用放在一个知道项目列表和项目详细信息视图的组件上。协调两者。

或者,更简单的方法是不使用事件,而是使用命名模型。当您单击列表上的项目时,您将模型的数据设置为"currentItem",然后绑定到"currentItem>x"的详细信息视图字段将自动更新。

您可以将路由框架和所描述的模型技术相结合,以创建视图之间的无缝导航。

最新更新