如何在 SAPUI5 V1.38.39 中从本地 JSON 文件在控制器中创建 JSON 模型?
How to create in controller a JSON model from a local JSON file in SAPUI5 V1.38.39?
环境:
框架:SAPUI5 V.1.38.39
IDE : 网络创意
要求:
我在 模型文件夹 中创建了一个 JSON 文件 Data.json,我想在在我的 controller 的 onInit 中 create a JSONmodel,我的实际问题是它总是 在 Data.json 上给我返回 404 响应。
文件夹树它是第一个来自 SAPUI5 应用程序模板
代码和测试中的问题:
测试 1 在 webapp/controller/App.contoller.js:
onInit: function () {
var oBusy = new sap.m.BusyDialog();
var oModel = new JSONModel();
oModel.attachRequestSent(function() {
oBusy.open();
});
oModel.loadData("model/Data.json"); //here the path so I suppose here the problem
oModel.attachRequestCompleted(function() {
oBusy.close();
});
this.getView().setModel(oModel, "CompaniesModel")
}
测试 2 在 webapp/controller/App.contoller.js:
onInit: function () {
var oBusy = new sap.m.BusyDialog();
var oModel = new JSONModel();
oModel.attachRequestSent(function() {
oBusy.open();
});
oModel.loadData("../model/Data.json"); //here the path so I suppose here the problem
oModel.attachRequestCompleted(function() {
oBusy.close();
});
this.getView().setModel(oModel, "CompaniesModel")
}
测试 3 在 webapp/controller/App.contoller.js:
onInit: function () {
var oBusy = new sap.m.BusyDialog();
var oModel = new JSONModel();
oModel.attachRequestSent(function() {
oBusy.open();
});
oModel.loadData("my/namespace/model/Data.json"); //here the path so I suppose here the problem
oModel.attachRequestCompleted(function() {
oBusy.close();
});
this.getView().setModel(oModel, "CompaniesModel")
}
附录 - 重现过程:
在 Webide for SAPUI5 中从模板创建新的 SAPUI5 应用程序选择 SAP 版本 1.38.39,初始化您的命名空间和您的 view/controller 名称。
在模型中创建新的 Data.json :
{
"Set1": [{
"Status": "status1",
"Number": 10
}, {
"Status": "status2",
"Number": 20
}, {
"Status": "status3",
"Number": 30
}, {
"Status": "status4",
"Number": 40
}]
}
在您看来:
<mvc:View
controllerName="your.namespace.controller.App"
xmlns:l="sap.ui.layout"
xmlns:core="sap.ui.core"
xmlns:mvc="sap.ui.core.mvc"
xmlns:viz="sap.viz.ui5.controls"
xmlns:viz.feeds="sap.viz.ui5.controls.common.feeds"
xmlns:viz.data="sap.viz.ui5.data"
xmlns:com="sap.suite.ui.commons"
xmlns="sap.m">
<Shell id="shell">
<App id="app">
<pages>
<Page id="page" title="{i18n>title}">
<content>
<l:VerticalLayout class="sapUiContentPadding" width="100%">
<com:ChartContainer id="chartContainer" showFullScreen="true" showPersonalization="false" autoAdjustHeight="false"
personalizationPress="attachPersonalizationPress" contentChange="attachContentChange" title="chart">
<com:content>
<com:ChartContainerContent icon="sap-icon://line-chart" title="Line Chart">
<com:content>
<viz:VizFrame id="idVizFrame_1" height='400px' width="100%" vizType='column' uiConfig="{applicationSet:'fiori'}">
<viz:dataset>
<viz.data:FlattenedDataset data="{CompaniesModel>/Set1}">
<viz.data:dimensions>
<viz.data:DimensionDefinition name="Status" value="{CompaniesModel>Status}"/>
</viz.data:dimensions>
<viz.data:measures>
<viz.data:MeasureDefinition name="Number" value="{CompaniesModel>Orders}"/>
</viz.data:measures>
</viz.data:FlattenedDataset>
</viz:dataset>
<viz:feeds>
<viz.feeds:FeedItem uid="valueAxis" type="Measure" values="Number"/>
<viz.feeds:FeedItem uid="categoryAxis" type="Dimension" values="Status"/>
</viz:feeds>
</viz:VizFrame>
</com:content>
</com:ChartContainerContent>
</com:content>
</com:ChartContainer>
</l:VerticalLayout>
</content>
</Page>
</pages>
</App>
</Shell>
</mvc:View>
在你的控制器中:
sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/ui/model/json/JSONModel",
], function (Controller, JSONModel) {
"use strict";
return Controller.extend("your.namespace.controller.App", {
onInit: function () {
//copy here one of the controller described in Problem in code & test
}
});
});
编辑(清单以外的其他选项):
如果您不想使用清单,我会在此处添加这种可能性,要使用清单,请转到@Cmdd 接受的答案:)
如果你不想使用清单,你可以这样做:
oModel.loadData("../../../../../webapp/model/Data.json");
最好的方法是加载 manifest.json
中的数据,如 this link 中所述。
在 "sap.app" 部分:
"sap.app": {
...
"dataSources": {
"myModel_alias": {
"uri": "model/Data.json",
"type": "JSON"
}
}
}
在 "sap.ui5" 部分:
"models": {
"i18n": {
"type": "sap.ui.model.resource.ResourceModel",
"settings": {
"bundleName": "cmdd.Test.i18n.i18n"
}
},
"CompaniesModel": {
"type": "sap.ui.model.json.JSONModel",
"dataSource": "myModel_alias"
}
},
此外,不要忘记在此绑定中加上斜杠:data="{CompaniesModel>/Set1}"
:)
环境:
框架:SAPUI5 V.1.38.39
IDE : 网络创意
要求:
我在 模型文件夹 中创建了一个 JSON 文件 Data.json,我想在在我的 controller 的 onInit 中 create a JSONmodel,我的实际问题是它总是 在 Data.json 上给我返回 404 响应。
文件夹树它是第一个来自 SAPUI5 应用程序模板
代码和测试中的问题:
测试 1 在 webapp/controller/App.contoller.js:
onInit: function () {
var oBusy = new sap.m.BusyDialog();
var oModel = new JSONModel();
oModel.attachRequestSent(function() {
oBusy.open();
});
oModel.loadData("model/Data.json"); //here the path so I suppose here the problem
oModel.attachRequestCompleted(function() {
oBusy.close();
});
this.getView().setModel(oModel, "CompaniesModel")
}
测试 2 在 webapp/controller/App.contoller.js:
onInit: function () {
var oBusy = new sap.m.BusyDialog();
var oModel = new JSONModel();
oModel.attachRequestSent(function() {
oBusy.open();
});
oModel.loadData("../model/Data.json"); //here the path so I suppose here the problem
oModel.attachRequestCompleted(function() {
oBusy.close();
});
this.getView().setModel(oModel, "CompaniesModel")
}
测试 3 在 webapp/controller/App.contoller.js:
onInit: function () {
var oBusy = new sap.m.BusyDialog();
var oModel = new JSONModel();
oModel.attachRequestSent(function() {
oBusy.open();
});
oModel.loadData("my/namespace/model/Data.json"); //here the path so I suppose here the problem
oModel.attachRequestCompleted(function() {
oBusy.close();
});
this.getView().setModel(oModel, "CompaniesModel")
}
附录 - 重现过程:
在 Webide for SAPUI5 中从模板创建新的 SAPUI5 应用程序选择 SAP 版本 1.38.39,初始化您的命名空间和您的 view/controller 名称。
在模型中创建新的 Data.json :
{
"Set1": [{
"Status": "status1",
"Number": 10
}, {
"Status": "status2",
"Number": 20
}, {
"Status": "status3",
"Number": 30
}, {
"Status": "status4",
"Number": 40
}]
}
在您看来:
<mvc:View
controllerName="your.namespace.controller.App"
xmlns:l="sap.ui.layout"
xmlns:core="sap.ui.core"
xmlns:mvc="sap.ui.core.mvc"
xmlns:viz="sap.viz.ui5.controls"
xmlns:viz.feeds="sap.viz.ui5.controls.common.feeds"
xmlns:viz.data="sap.viz.ui5.data"
xmlns:com="sap.suite.ui.commons"
xmlns="sap.m">
<Shell id="shell">
<App id="app">
<pages>
<Page id="page" title="{i18n>title}">
<content>
<l:VerticalLayout class="sapUiContentPadding" width="100%">
<com:ChartContainer id="chartContainer" showFullScreen="true" showPersonalization="false" autoAdjustHeight="false"
personalizationPress="attachPersonalizationPress" contentChange="attachContentChange" title="chart">
<com:content>
<com:ChartContainerContent icon="sap-icon://line-chart" title="Line Chart">
<com:content>
<viz:VizFrame id="idVizFrame_1" height='400px' width="100%" vizType='column' uiConfig="{applicationSet:'fiori'}">
<viz:dataset>
<viz.data:FlattenedDataset data="{CompaniesModel>/Set1}">
<viz.data:dimensions>
<viz.data:DimensionDefinition name="Status" value="{CompaniesModel>Status}"/>
</viz.data:dimensions>
<viz.data:measures>
<viz.data:MeasureDefinition name="Number" value="{CompaniesModel>Orders}"/>
</viz.data:measures>
</viz.data:FlattenedDataset>
</viz:dataset>
<viz:feeds>
<viz.feeds:FeedItem uid="valueAxis" type="Measure" values="Number"/>
<viz.feeds:FeedItem uid="categoryAxis" type="Dimension" values="Status"/>
</viz:feeds>
</viz:VizFrame>
</com:content>
</com:ChartContainerContent>
</com:content>
</com:ChartContainer>
</l:VerticalLayout>
</content>
</Page>
</pages>
</App>
</Shell>
</mvc:View>
在你的控制器中:
sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/ui/model/json/JSONModel",
], function (Controller, JSONModel) {
"use strict";
return Controller.extend("your.namespace.controller.App", {
onInit: function () {
//copy here one of the controller described in Problem in code & test
}
});
});
编辑(清单以外的其他选项):
如果您不想使用清单,我会在此处添加这种可能性,要使用清单,请转到@Cmdd 接受的答案:)
如果你不想使用清单,你可以这样做:
oModel.loadData("../../../../../webapp/model/Data.json");
最好的方法是加载 manifest.json
中的数据,如 this link 中所述。
在 "sap.app" 部分:
"sap.app": {
...
"dataSources": {
"myModel_alias": {
"uri": "model/Data.json",
"type": "JSON"
}
}
}
在 "sap.ui5" 部分:
"models": {
"i18n": {
"type": "sap.ui.model.resource.ResourceModel",
"settings": {
"bundleName": "cmdd.Test.i18n.i18n"
}
},
"CompaniesModel": {
"type": "sap.ui.model.json.JSONModel",
"dataSource": "myModel_alias"
}
},
此外,不要忘记在此绑定中加上斜杠:data="{CompaniesModel>/Set1}"
:)