使用参数路由 - patternMatched事件未触发

问题描述 投票:1回答:3

我正在使用Web IDE处理UI5应用程序,我创建了一个视图,我需要根据从上一个视图接收的参数绑定数据。但是patternMatched事件没有解雇。

manifest.json

"routing": {
  "config": {
    "routerClass": "sap.m.routing.Router",
    "viewType": "XML",
    "viewPath": "oomsdisplay.pso.com.view",
    "controlId": "app",
    "controlAggregation": "pages",
    "bypassed": {
      "target": ["notFound"]
    },
    "async": true
  },
  "routes": [{
    "pattern": "",
    "name": "worklist",
    "target": ["worklist"]
  }, {
    "pattern": "ZISOHSet/{objectId}",
    "name": "object",
     "target": ["object"]
  }, {
    "pattern": "ZISOHSet/{objectId}",
    "name": "payobject",
    "target": ["payobject"]
  }],
  "targets": {
    "worklist": {
      "viewName": "Worklist",
      "viewId": "worklist",
      "viewLevel": 1
    },
    "object": {
      "viewName": "Object",
      "viewId": "object",
      "viewLevel": 2
    },
    "objectNotFound": {
      "viewName": "ObjectNotFound",
      "viewId": "objectNotFound"
    },
    "notFound": {
      "viewName": "NotFound",
      "viewId": "notFound"
    },
    "payobject": {
      "viewName": "PayObject",
      "viewId": "payobject",
      "viewLevel": 2
    }
  }
}

Component.js

init: function() {
  UIComponent.prototype.init.apply(this, arguments);
  // ...
  this.getRouter().initialize(); // create the views based on the url/hash
},

现在,我创建了一个视图。当我按下视图上的按钮时,我的第二个视图即PayObject将被调用。这是我按下按钮的代码:

fViewPayment: function(oEvent) {
  this.getRouter().getTargets().display("payobject", {
    objectId: "MyParameterhere"
  });
},

现在,这是我的PayObejct视图的init处理程序与对象匹配处理程序。但它没有用。

onInit: function() {
  // ...
  var oRouter = sap.ui.core.UIComponent.getRouterFor(this);
  oRouter.getRoute("payobject").attachPatternMatched(this._onObjectMatched, this);
},

_onObjectMatched: function(oEvent) { // this event handler is not firing
  var sObjectId = oEvent.getParameter("arguments").objectId;
  sap.m.MessageBox.show(sObjectId);
  // ...
},
sapui5
3个回答
3
投票

如果您有两条具有相同模式的路由,则只在路由器中匹配第一条路由。

{
   "pattern": "ZISOHSet/{objectId}",
   "name": "object",
   "target": ["object"]
}, {
   "pattern": "ZISOHSet/{objectId}",
   "name": "payobject",
   "target": ["payobject"]
}

所以在这种情况下,“对象”将匹配。更改其中一条路线的模式,然后重试。

此外,在导航时使用navTo():

this.getRouter().navTo("payobject", {
  objectId: "MyParameterhere"
});

1
投票

而不是使用

getTargets()。显示

使用您的Router对象中的navTo方法

https://sapui5.hana.ondemand.com/#/api/sap.ui.core.routing.Router/overview


1
投票

你必须使用相同模式的路由:“object”和“payobject”,我会尝试删除一个并再次检查。

© www.soinside.com 2019 - 2024. All rights reserved.