SAPUI5:导航到动态创建的视图

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

我想基于现有视图动态创建视图,然后添加必要的路由/目标。目前我使用以下代码来实现此目的:

var viewName = name + "View";
var targetName = name + "Target";
var routeName = name + "Route";

if (this.getRouter().getRoute(routeName) === undefined) {        
    console.log("create view");

    var view = sap.ui.view(({ viewName: "demo.view.Test", type: sap.ui.core.mvc.ViewType.XML }));
    this.getRouter().getTargets().getViews().setView(viewName, view);

    console.log("create target");

    this.getRouter().getTargets().addTarget(targetName, {
        viewName: viewName,
        viewPath: "demo.view",
        viewLevel: 2,
        parent: "base",
        controlId: "mainContainer",
        controlAggregation: "pages",
        title: name
    });

    console.log("create route");

    this.getRouter().addRoute({
        name: routeName,
        pattern: name,
        target: targetName
    });
}; 

但是,如果我运行此代码(例如name =“Test2”)然后尝试导航到生成的路由,则会收到错误消息,指出无法找到包含该视图的文件(例如Test2.view.xml)。

有没有办法在没有视图文件的情况下将此动态创建的视图用作目标?

更新

为视图创建别名以支持多个实例的想法来自UI5文档:https://openui5.hana.ondemand.com/#/api/sap.m.routing.Targets/constructor(请参阅构造函数中的viewName)

javascript sapui5
1个回答
0
投票

从UI5 1.56开始,有一种新方法sap.ui.core.mvc.View.create

你可以尝试这样的事情:

sap.ui.require(['sap/ui/core/mvc/View'],
   function(View){
     View.create({
       viewName: "demo.view.ViewToGetCloned",
       viewId: "demo.view.NameOfNewView",
       type: sap.ui.core.mvc.ViewType.XML
       }).then(function(oView) {
          ...    
       }.bind(this));
}.bind(this));
© www.soinside.com 2019 - 2024. All rights reserved.