0
votes

I have an SAPUI5 app with 2 views. When I try navigate from the first view to the second view with an router it throws this error:

"Uncaught TypeError: JSONModel is not a constructor(…)"

The problem is I have to consume the content of the JSON to fill a table and with this error it is still empty

In a similar case/application my code runs without a problem, so I would be happy if someone can read my code if there are some errors...

Main.view.xml

<mvc:View controllerName="App.controller.Main" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:mvc="sap.ui.core.mvc"
displayBlock="true" xmlns="sap.m">
<App>
    <pages>
        <Page>
            <content>
                <Table id="paramTable" items="{/callbackData}" width="auto" class="sapUiResponsiveMargin">
                    <columns>
                        <Column>
                            <Label text="Parameter"></Label>
                        </Column>
                        <Column width="10%">
                            <Label text="CurrentVal"></Label>
                        </Column>
                        <Column width="10%">
                            <Label text="TargetVal"></Label>
                        </Column>
                        <Column width="30%">
                            <Label text="Description"></Label>
                        </Column>
                    </columns>
                    <items>
                        <ColumnListItem>
                            <cells>
                                <ObjectIdentifier title="{key}"></ObjectIdentifier>
                            </cells>
                            <Text text="{currentVal}"></Text>
                            <Text text="{operator} {targetVal}"></Text>
                        </ColumnListItem>
                    </items>
                </Table>
            </content>
        </Page>
    </pages>
</App>

Main.controller.js

sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/ui/model/json/JSONModel"
], function(Controller , JSONModel) {
"use strict";

return Controller.extend("App.controller.Main", {

    onInit : function() {

        this.getView().setModel(new JSONModel({
            callbackData: []
        }));

    },

    setTableData : function() {
        var here = this;
        $.ajax({
            url : '../../test.xsjs',
            type : "GET",
            success : function(data) {
                here.getView().getModel().setProperty("/callbackData", data);
            }
        });
    }
});
});

Thanks in advance!!!

1
// try like this. this.getView().setModel(new sap.ui.model.json.JSONModel({ callbackData: [] })); - suryabhan mourya
@suryabhanmourya That's not the real solution. Resolving "sap/ui/model/json/JSONModel" and thus using the module without the global namespace should just work. Something else is wrong in @user7715132 's code which was probably not provided here. - Boghyon Hoffmann
In some other controllers, you might be requiring the JSONModel module in the wrong index. See stackoverflow.com/a/61121016/5846045 - Boghyon Hoffmann

1 Answers

-1
votes
var oModel = new JSONModel({
                  callbackData: []
                 });

this.getView().setModel(oModel);