1
votes

I try to use the template:if for my XML View.

As an example i have this:

<mvc:View controllerName="Test_Start.controller.View" 
xmlns:html="http://www.w3.org/1999/xhtml" 
xmlns:mvc="sap.ui.core.mvc" 
xmlns:temp="http://schemas.sap.com/sapui5/extension/sap.ui.core.template/1"
displayBlock="true" xmlns="sap.m">
<App>
    <pages>
        <Page title="{i18n>title}">
            <content>

                <temp:if test="{= ${Data>Enable1} === 'X'}">
                <Text text="Hallo"/>
                </temp:if>
                </content>
        </Page>
    </pages>
</App>
</mvc:View>

and my Component.js looks like this:

sap.ui.define([
"sap/ui/core/UIComponent",
"sap/ui/Device",
"Test_Start/model/models",
"sap/ui/model/odata/v2/ODataModel",
"sap/ui/core/util/XMLPreprocessor"
], function(UIComponent, Device, models, ODataModel, XMLPreprocessor) {
"use strict";

return UIComponent.extend("Test_Start.Component", {

    metadata: {
        manifest: "json"
    },

    /**
     * The component is initialized by UI5 automatically during the startup of the app and calls the init method once.
     * @public
     * @override
     */
    init: function() {
        // call the base component's init function
        UIComponent.prototype.init.apply(this, arguments);

        // set the device model
        this.setModel(models.createDeviceModel(), "device");



    },

    onBeforeRendering: function(){
        var oModel = new ODataModel("/sap/opu/odata/SAP/ZPFO_CKPT_ODATA_DYN_SRV/"),
        oMetaModel = oModel.getMetaModel(),
        sPath = "/DataSet";

        oMetaModel.loaded().then(function() {
            var oTemplateView = sap.ui.view({
                preprocessors: {
                    xml: {
                        bindingContexts : {
                            meta : oMetaModel.getMetaContext(sPath)
                        },
                        models: {
                            meta: oMetaModel
                        }
                    }
                },
                type : sap.ui.core.mvc.ViewType.XML,
                viewName: "Test_Start.view.View"
            });
            oTemplateView.setModel(oModel);
            oTemplateView.bindElement(sPath);

        });
    }
});
});

Now, when I try to run my App, i get the following error:

XMLTemplateProcessor-dbg.js:53 Uncaught Error: failed to load 'http://schemas/sap/com/sapui5/extension/sap/ui/core/template/1/if.js' from ../../resources/http://schemas/sap/com/sapui5/extension/sap/ui/core/template/1/if.js: 404 - Not Found

I did some research and found out, that i probably load the preprocessor at the wrong time, but I seem to can't find the right place to load it.

I use this SAPUI5 SDK example for my work.

  • Edit

I found a solution for my problem:

instead of an "onBeforeRendering" function, now i'm using a "createContent" function. Also i deleted the "init" completly.

In adition to that, I implemented an oViewContainer, like it is used in the sample.

1
At least one error I see <temp:if test="{= ${Data>Enable1} === 'X'}">. You defined preprocesing model with name "meta" and you reference name "Data" in "if" expression. Should be <temp:if test="{= ${meta>Enable1} === 'X'}"> - slkorolev
@slkorolev ahhh I see, but this doesn't solve the error problem - Penrock
I have the same problem, did you solved it ? - Daniel Flores
@DanielFlores yeah, look for the Edit in my post, there is my solution - Penrock

1 Answers

0
votes

Also controller name "Test_Start.Component" doesn't match the controllerName attribute in the view "Test_Start.controller.View".