代码之家  ›  专栏  ›  技术社区  ›  Tina Chen

找不到SAPUI5路由抛出错误控件(应用程序控件的ID)

  •  4
  • Tina Chen  · 技术社区  · 8 年前

    这个问题来源于 this answer (我无法运行源代码),我的要求与 this question

    “找不到ID为的控件应用程序”

    单击项目时出错。

    我的metadata.json:

    "routing": {
      "config": {
        "routerClass": "cts.alert.MyRouter",
        "viewType": "XML",
        "viewPath": "cts.alert.view",
        "controlId": "app",
        "controlAggregation": "pages",
        "clearTarget": "false",
        "bypassed": {
          "target": [
            "notFound"
          ]
        },
        "async": true
      },
      "routes": [
        {
          "pattern": "",
          "name": "worklist",
          "target": [
            "worklist"
          ]
        },
        {
          "pattern": "split",
          "name": "split",
          //<SplitContainer id="idAppControl"> in SplitApp.view.xml
          "view": "SplitApp",
          //<App id="app"/> in App.view.xml
          "targetControl": "app",
          "subroutes": [
            {
              "pattern": "master",
              "name": "main",
              "view": "Master",
              "targetAggregation": "masterPages",
              "targetControl": "idAppControl", //SplitContainer id
              "subroutes": [
                {
                  "pattern": "VEHICLES/{objectId}",
                  "name": "object",
                  "view": "Detail",
                  "targetAggregation": "detailPages",
                }
              ]
            }
          ]
        },
        {
          "name": "catchallMaster",
          "view": "Master",
          "targetAggregation": "masterPages",
          "targetControl": "idAppControl",
          "subroutes": [
            {
              "pattern": ":all*:",
              "name": "catchallDetail",
              "view": "NotFound"
            }
          ]
        }
      ],
      "targets": {
        "master": {
          "viewName": "Master",
          "viewLevel": 2,
          "viewId": "master",
          "controlAggregation": "masterPages"
        },
        "worklist": {
          "viewName": "Worklist",
          "viewId": "worklist",
          "viewLevel": 1
        },
        "object": {
          "viewName": "Detail",
          "viewId": "detail",
          "viewLevel": 3
        },
        "objectNotFound": {
          "viewName": "ObjectNotFound",
          "viewId": "objectNotFound"
        },
        "notFound": {
          "viewName": "NotFound",
          "viewId": "notFound"
        },
        "detailObjectNotFound": {
          "viewName": "DetailObjectNotFound",
          "viewId": "detailObjectNotFound"
        },
        "detailNoObjectsAvailable": {
          "viewName": "DetailNoObjectsAvailable",
          "viewId": "detailNoObjectsAvailable"
        }
      }
    }
    

    我不确定代位诉讼是否还需要这么多目标。我知道问题在于 "targetControl" : "app" 在里面 "split" 路由,但如果我在中添加“targetControl”:“idAppControl” "object" 路线,它还将产生

    this answer 说:

    您不能加入与父路由相同的控件。

    我现在真的很困惑。

    我还尝试了删除 "rootview" 在里面 "sap.ui5" ,不工作。

    欢迎任何帮助!提前谢谢!

    2 回复  |  直到 6 年前
        1
  •  5
  •   Tina Chen    8 年前

    多亏了这个 route configuration doc ,我解决了我的问题。

    我以为是的 "targetControl": "app" 在中 split 导致此错误的路由,但实际上是因为 "controlId": "app" 在里面 routing.config 这导致了这个问题。

    config参数定义路由配置的默认值。

    在更改之后,我得到了另一个错误:

    target 在里面 worklist 路由并添加 targetControl: app 因为它不再有默认值 targetControl 价值

    以下是新的路由配置:

    "routing": {
        "config": {
            "routerClass": "cts.alert.MyRouter",
            "viewType": "XML",
            "viewPath": "cts.alert.view",
            "controlAggregation": "pages",
            "clearTarget": "false",
            "bypassed": {
                "target": [
                    "notFound"
                ]
            },
            "async": true
        },
        "routes": [
            {
                "pattern": "",
                "name": "worklist",
                "view": "Worklist",
                "targetControl": "app"
            },
            {
                "pattern": "split",
                "name": "split",
                "view": "SplitApp",
                "targetControl": "app",
                "subroutes": [
                    {
                        "pattern": "master",
                        "name": "main",
                        "view": "Master",
                        "targetAggregation": "masterPages",
                        "targetControl": "idAppControl",
                        "subroutes": [
                            {
                                "pattern": "VEHICLES/{objectId}",
                                "name": "object",
                                "view": "Detail",
                                "targetAggregation": "detailPages"
                            }
                        ]
                    }
                ]
            },
            {
                "name": "catchallMaster",
                "view": "Master",
                "targetAggregation": "masterPages",
                "targetControl": "idAppControl",
                "subroutes": [
                    {
                        "pattern": ":all*:",
                        "name": "catchallDetail",
                        "view": "NotFound"
                    }
                ]
            }
        ],
    }
    
        2
  •  0
  •   codecampo    5 年前

    "controlId": "app" ) 还需要在初始视图中匹配应用程序的id

    <mvc:View controllerName="MyView" xmlns:core="sap.ui.core" xmlns:mvc="sap.ui.core.mvc" 
    xmlns="sap.m" xmlns:html="http://www.w3.org/1999/xhtml">    
      <Shell id="shell">
        <App id="app">