SAPUI5 - oModel.create 不是函数
SAPUI5 - oModel.create is not a function
我正在尝试构建一个简单的 SAPUI5 应用程序,它基本上列出了一个 table 填充了员工数据(ID、姓名、地址)的应用程序。
但是,我无法添加新员工,因为我总是遇到同样的错误:
Uncaught TypeError: oModel.create is not a function
at constructor.Save (EmpDetails.controller.js?eval:87)
你能帮我解决这个问题吗?我不明白为什么创建函数不起作用,因为它已连接到模型并且应该可以正常工作(就像在初始化时填充 table 的 GET 方法一样)。
这是我的控制器代码:
sap.ui.controller("zemployee_crud.EmpDetails", {
onInit: function() {
var sServiceUrl = "proxy/http/<server>:<port>/sap/opu/odata/sap/ZEMPLOYEE_SRV";
var oModel = new sap.ui.model.odata.ODataModel(sServiceUrl, true);
var oJsonModel = new sap.ui.model.json.JSONModel();
oModel.read("/EmployeeSet",null,null,true,function(oData,response){
oJsonModel.setData(oData);
});
sap.ui.getCore().setModel(oJsonModel);
},
Save: function() {
var oId = sap.ui.getCore().byId("Id").getValue();
var oName = sap.ui.getCore().byId("Name").getValue();
var oAddress = sap.ui.getCore().byId("Address").getValue();
var oEntry = {};
oEntry.Empid = oId;
oEntry.Empname = oName;
oEntry.Empadd = oAddress;
var oModel = sap.ui.getCore().getModel();
oModel.create("/EmployeeSet", oEntry, null, function (response) {
// success message
// table reload
}, function (Error) {
//show error
});
}
});
您的JSON型号不支持create
。您必须使用 ODataModel。
首先你必须把你的模型存储在某个地方
var oModel = new sap.ui.model.odata.ODataModel(sServiceUrl, true);
this.getView().setModel(oModel);
然后您可以访问模型并调用创建。
var oModel = this.getView().getModel();
oModel.create(...);
这是最简单的方法。我强烈建议了解框架:
sap.ui.model.odata.ODataModel
已弃用。使用 sap.ui.model.odata.v2.ODataModel
.
- 在 manifest.json 中声明您的模型。然后所有控制器都可以访问它。
- 在大多数情况下,您不需要额外的 JSON模型。您可以直接使用 ODataModel 并将其显示在您的列表中
- 无需将任何模型(JSON 或 OData)设置为核心 (
sap.ui.getCore().setModel()
)。核心处于非常high/global的水平。大多数情况下,将其设置在 app/component 级别(在您的 manifest.json 或 Component.js 中)或控制器级别就足够了。
我也强烈建议做 official walkthrough。它需要 1-2 天才能完成,但在那之后你几乎是专业人士,因为它回答了 95% 的初学者问题。
我正在尝试构建一个简单的 SAPUI5 应用程序,它基本上列出了一个 table 填充了员工数据(ID、姓名、地址)的应用程序。
但是,我无法添加新员工,因为我总是遇到同样的错误:
Uncaught TypeError: oModel.create is not a function at constructor.Save (EmpDetails.controller.js?eval:87)
你能帮我解决这个问题吗?我不明白为什么创建函数不起作用,因为它已连接到模型并且应该可以正常工作(就像在初始化时填充 table 的 GET 方法一样)。 这是我的控制器代码:
sap.ui.controller("zemployee_crud.EmpDetails", {
onInit: function() {
var sServiceUrl = "proxy/http/<server>:<port>/sap/opu/odata/sap/ZEMPLOYEE_SRV";
var oModel = new sap.ui.model.odata.ODataModel(sServiceUrl, true);
var oJsonModel = new sap.ui.model.json.JSONModel();
oModel.read("/EmployeeSet",null,null,true,function(oData,response){
oJsonModel.setData(oData);
});
sap.ui.getCore().setModel(oJsonModel);
},
Save: function() {
var oId = sap.ui.getCore().byId("Id").getValue();
var oName = sap.ui.getCore().byId("Name").getValue();
var oAddress = sap.ui.getCore().byId("Address").getValue();
var oEntry = {};
oEntry.Empid = oId;
oEntry.Empname = oName;
oEntry.Empadd = oAddress;
var oModel = sap.ui.getCore().getModel();
oModel.create("/EmployeeSet", oEntry, null, function (response) {
// success message
// table reload
}, function (Error) {
//show error
});
}
});
您的JSON型号不支持create
。您必须使用 ODataModel。
首先你必须把你的模型存储在某个地方
var oModel = new sap.ui.model.odata.ODataModel(sServiceUrl, true);
this.getView().setModel(oModel);
然后您可以访问模型并调用创建。
var oModel = this.getView().getModel();
oModel.create(...);
这是最简单的方法。我强烈建议了解框架:
sap.ui.model.odata.ODataModel
已弃用。使用sap.ui.model.odata.v2.ODataModel
.- 在 manifest.json 中声明您的模型。然后所有控制器都可以访问它。
- 在大多数情况下,您不需要额外的 JSON模型。您可以直接使用 ODataModel 并将其显示在您的列表中
- 无需将任何模型(JSON 或 OData)设置为核心 (
sap.ui.getCore().setModel()
)。核心处于非常high/global的水平。大多数情况下,将其设置在 app/component 级别(在您的 manifest.json 或 Component.js 中)或控制器级别就足够了。
我也强烈建议做 official walkthrough。它需要 1-2 天才能完成,但在那之后你几乎是专业人士,因为它回答了 95% 的初学者问题。