SAPUI5 / OPENUI5 JavaScript视图HTML元素呈现

时间:2018-07-30 14:59:07

标签: javascript html5 html5-canvas sapui5 sap-fiori

我是SAPUI5 / OPENUI5的新手,我创建了一个javascript视图,该视图基本上可以导入多个图形和图表库,并且像实用程序一样,它可以创建多个带有图标的图形和图表。

下面是相同的代码 下面是Js(创建图形的sap ui JS视图)

jQuery.sap.require("some.graph.lib");
jQuery.sap.require("some.util.lib");
jQuery.sap.require("some.other.imports");
(function(){

    sas.hc.ui.core.mvc.JSView.extend(" reports.dashboard.BaseDashboard.prototype.addCrossTab", {

        metadata : {
            properties : {
                chartRequired:false,
                tableDataRequired:false
            },
        },

        rb: sap.ui.getCore().getLibraryResourceBundle("sas.csb.common"),

  reports.dashboard.BaseDashboard.prototype.createGraphics = function (data) {
    //This Function creates barchart, line charts and cross tab tables
        return this.mainContentPane;
    };

    //Some other code to create and render graph
})();

我正在创建另一个视图,在该视图中导入上述视图并进行ajax调用,以便我可以创建图形和表格并将其作为base64编码的字符串发送到REST API,以在服务器端保存为PDF。

jQuery.sap.require("sas.cscommon.util.JSONUtil");
jQuery.sap.require({modName: "reports.dashboard.MeasureDashboard", type: "view"});

(function(){

    var rb = sap.ui.getCore().getLibraryResourceBundle("sas.csb.backtesting");

    //some other method

     sas.csb.backtesting.ModelList.prototype.downloadModelReport = function(event) { 
        var id = "sample";
            var oView = new reports.dashboard.MeasureDashboard(id, {
                            viewName: "reports.dashboard.MeasureDashboard",
                            chartrequired: true
                        } );


        //Calling REST API to get data
        oView.createGraphics(data);
}

如何在不向用户显示该javascript sapui5 oView对象的情况下将其转换为HTML元素,以便我可以将画布和其他图形转换为以64为基数的字符串,并将其传递给REST API以保存在服务器端?

我想从视图对象访问canvas html元素而不在屏幕上呈现视图。

我知道sapui5中有一个附加了sapui5控件和RenderManager的渲染器,但是它没有帮助。

1 个答案:

答案 0 :(得分:0)

不幸的是,不推荐使用直接获取HTML的方法。但是您可以创建一个不在DOM中的临时元素。

var div = document.createElement("div");
var rm = sap.ui.getCore().createRenderManager();
rm.render(oView, div);
rm.destroy();
var sHTML = div.innerHTML;