sap.ui.core.routing.Router.navTo()和sap.m.routing.Targets.display()有什么区别?

时间:2017-09-21 06:19:41

标签: sapui5

假设我们有一条路线和一条目标:

"routes": [{
  "pattern": "modify",
  "name": "modify",
  "target": [
    "master",
    "modify"
  ]
}],
"targets": {
  "modify": {
    "viewName": "Modify",
    "viewId": "modify",
    "viewLevel": 2
  }
}

所以我可以通过this.getRouter().navTo("modify")访问路线,同时我可以通过this.getRouter().getTargets().display("modify")访问目标。两个API都可以通过第二个参数携带参数。它似乎达到了同样的效果。

我可以在不为其定义路线的情况下访问目标。所以我不太明白为什么我需要一条路线?

参考:sap.m.routing.Targetssap.ui.core.routing.Router

2 个答案:

答案 0 :(得分:2)

display相比,

navTo显示目标视图而不更改哈希值。

您可以在教程“Display a Target Without Changing the Hash”中找到更多信息。

  

两个API都可以通过第二个参数携带参数。它似乎达到了同样的效果。

  • display 方法中的数据适用于display 事件处理程序。当事件为fired时,处理程序会携带我们之前传递的数据。
  • 参数地图我们可以传递给navTo 必须强制模式实际等待参数,例如如果我们最初定义了这样的模式:"pattern": "modify/{id}"。查看“Navigate to Routes with Mandatory Parameters”。

答案 1 :(得分:2)

只需补充Boghyon's answer

  1. 路由模式在路由器中定义,并在路由器中设置哈希。这是主要区别.BTW,UI5使用crossroadshasher来帮助实现路由器。
  2. navTo()中的
  3. sap.m.routing.Router来自sap.ui.core.routing.Router
  4. display()中的
  5. sap.m.routing.Targets来自sap.ui.core.routing.Targets
  6. 在路由的_routeMatched
  7. ,呼叫oRouter._oTargets._display。因此,在路由器和目标中都会调用_display
  8. 他们使用的参数不同。navTo使用路由名称,display使用目标名称。有时他们的定义是一样的。

    onToPage2 : function () {
      // this.getOwnerComponent().getRouter().navTo("pageRoute2");
      this.getOwnerComponent().getRouter().getTargets().display("pageTarget2");
    },
    
    onToPage1 : function () {
      this.getOwnerComponent().getRouter().navTo("pageRoute1");
      // this.getOwnerComponent().getRouter().getTargets().display("pageTarget1");
    }