我正在玩OData服务,我很困惑何时使用它
var oModel = new sap.ui.model.odata.ODataModel("proxy/http/services.odata.org/V3/(S(k42qhed3hw4zgjxfnhivnmes))/OData/OData.svc");
this.getView().setModel(oModel);
Run Code Online (Sandbox Code Playgroud)
VS
var oModel = new sap.ui.model.odata.ODataModel("odatserviceurl", true);
var productsModel = new JSONModel();
oModel.read("/Products",
null,
null,
false,
function _OnSuccess(oData, response) {
var data = { "ProductCollection" : oData.results };
productsModel.setData(data);
},
function _OnError(error) {
console.log(error);
}
);
this.getView().setModel(productsModel);
Run Code Online (Sandbox Code Playgroud)
我有两个使用这两种方法的工作示例,但我无法弄清楚为什么使用read方法,如果我可以实现与第一个版本相同.请向我解释或指导可以解决我的困惑的文件.
好的,让我们从模型开始:
JSON模型:JSON模型是客户端模型,因此适用于客户端完全可用的小型数据集.JSON模型支持双向绑定.注意:在过滤,搜索和刷新时不进行服务器端调用.
OData模型:OData模型是服务器端模型:数据集仅在服务器上可用,客户端只知道当前可见的行和字段.这也意味着无法在客户端上进行排序和过滤.为此,客户端必须向服务器发送请求.意思是搜索/过滤再次调用odata服务.
现在,让我们看看我们将使用这些模型的场景:
场景1:以列表/表格/显示形式向用户显示数据.数据操作仅限于搜索和过滤.在这里,我会直接使用oData模型来控制,因为只需要获取数据.(你的方法1)(注意:单向绑定).请记住,所有更改都需要调用服务器.
场景2:我有一个具有多个输入的应用程序,用户可以编辑更改,还有一些字段是计算和强制的.总而言之,许多用户更改可能是临时的,用户可能不想保存它们.在这里,您不希望将这些临时更改发送到后端.您希望在发送之前操纵,验证数据.在这里,我们将在从odata模型(您的方法2)读取数据后使用JSON模型.将更改存储在本地JSON模型中,验证并操作它们,最后使用Odata创建/更新发送数据.请记住,所有更改都不需要调用服务器,因为本地JSON模型中存在数据.
如果这有助于您,请告诉我.:)
编辑:附加信息:
根据你的评论:
文档说oModel.read'触发get请求但新的sap.ui.model.odata.ODataModel("proxy/http/services.odata.org/V3 /(S(k42qhed3hw4zg jxfnhivnmes))/ OData/OData. svc")`做同样的事情,为什么以及何时使用oModel.read
在这里,你是误解的地方.代码
new sap.ui.model.odata.ODataModel("proxy/http/services.odata.org??/V3/(S(k42qhed3hw4zg??jxfnhivnmes))/OData/??OData.svc") 不会发送读取/获取请求.它调用odata服务并获取服务的元数据.服务可以包含多个实体.例如:服务:http://services.odata.org/Northwind/Northwind.svc/有多个实体集,如Categories,Customers,Employees等.所以,当我声明:new sap.ui.model.odata.ODataModel("http://services.odata.org/Northwind/Northwind.svc/")它将获取服务的元数据(不是实际数据).只有当您调用所需的实体集时,它才会获取数据.指定了实体集:
'/Products')items='{/Products}')| 归档时间: |
|
| 查看次数: |
1840 次 |
| 最近记录: |