2017-04-06 76 views
1

我有2个视图:在master1中显示项目列表,当我点击一个项目时,我导航到master2。在控制器master1.js的代码看起来是这样的:SAPUI5导航并返回

   onSelect : function(oEvent) { 
         this.getRouter().navTo("master2", { 
           from : "master1", 
           zlonr : oLoadingOrder.LoNumber 
           }); 
       }, 

在onRouteMatched master2.js我有这样的代码:

  onRouteMatched : function(oEvent) { 
         var that = this; 
         var oParameters = oEvent.getParameters(); 

         if (oParameters.name === "master2") { 
           var oView = this.getView(); 
           var oDialog = oView.byId("dialogBaseInfo"); 

           if (!oDialog) { 

           oDialog = sap.ui.xmlfragment(oView.getId(),"ZABC.view.fragment.BaseInfo",this); 
           oView.addDependent(oDialog); 
                } 
              this.setCurrentDateTime(); 
              oDialog.open(); 

},

所以我只是打开一个对话框。 我可以看到对话框打开,但它马上又关闭,但它进入master2屏幕。调试器中没有错误。 我的路由看起来是这样的:

    pattern: "master1", 
        name: "master1", 
        view: "Master1", 
    //    viewLevel: 1, 
        targetAggregation: "pages", 
        clearControlAggregation: true, 
        targetControl: "masterAppId", 
        subroutes: [ 
        { 
         pattern: "zlonr/{zlonr}", 
         name: "master2", 
         view: "Master2", 
     //    viewLevel: 1, 
         targetAggregation: "pages", 

任何想法,为什么出现这种情况?对话应当保持开放并继续。

回答

0

,但随后再次关闭马上

默认情况下,target handler,这是由路由器创建,时自动导航时关闭所有对话框实例。目标处理程序提供了一种用setCloseDialogs更改此行为的方法。导航到“master2”之前,尝试添加下面一行:

this.getRouter().getTargetHandler().setCloseDialogs(false); 

对于其他意外的行为,尝试如subroutes避免使用过时的属性。请改用targets.yourTargetName.parent。看看this tutorial step看看如何使用parentclearControlAggregation也不应该使用sap.ui.ux3.Shellis deprecated以及。

+0

嗨,谢谢你的意见。这听起来是正确的,但它仍然关闭对话。在试图导航到master2之前,我试图把它放在master2的init中,但仍然关闭了对话框。 – Tim

+0

@Tim:我明白了。如果你能发布一些更多的代码或者我们可以重现问题的最小范例,那将会很好。否则,您可以通过调用堆栈进行调试,以确定从哪个模块调用哪个模块会破坏(或关闭)对话框。 – boghyon

+1

再次感谢您的帮助。我改变了一些设置,导航后没有立即调用对话框。找不到解决此问题的另一种方法。非常感谢您的帮助! – Tim