Sapui5 使用ODataModel和JSONModel有什么好处?

Sapui5 使用ODataModel和JSONModel有什么好处?,sapui5,datamodel,jsonmodel,Sapui5,Datamodel,Jsonmodel,我使用JSONModel从HANA读取数据,并将URL传递到源代码,然后按如下方式检索它: var data = new sap.ui.model.json.JSONModel(urlPath); 然后我可以将它绑定到我的视图:this.getView().setModel(数据) 我还看到了以下方法,即创建ODataModel,然后从数据创建JSONModel var-oModel=newsap.ui.model.odata.ODataModel(urlPath); oModelJson=n

我使用
JSONModel
从HANA读取数据,并将URL传递到源代码,然后按如下方式检索它:

var data = new sap.ui.model.json.JSONModel(urlPath);
然后我可以将它绑定到我的视图:
this.getView().setModel(数据)

我还看到了以下方法,即创建
ODataModel
,然后从数据创建
JSONModel

var-oModel=newsap.ui.model.odata.ODataModel(urlPath);
oModelJson=new sap.ui.model.json.JSONModel();
oModel.read(“/Items”,
无效的
[“$filter=ImItems eq‘输入参数’”,
无效的
功能(oData,响应){
setData(oData);
},
无效的
);
首先创建
ODataModel
与立即创建
JSONModel
有什么区别。因此,假设我从数据库返回大约5000个数据点,我应该使用哪种方法,或者没有区别?

是一个客户端模型,用于获取数据并将数据设置为JSON格式的视图

是OData协议的模型实现。 这允许对OData实体执行CRUD操作
JSONModel
不支持///操作

因此,在您的场景中,我建议始终使用
ODataModel
执行CRUD操作(包括读取)。然后可以使用JSON模型将数据绑定到视图

请注意,每个应用程序最好有一个
ODataModel
,多个
JSONModel
s绑定到视图


考虑使用和,因为您已经提到您正在处理5K数据点,如果您不知道UI中的所有数据。用于确保设置了正确的上限。

两者之间的一个主要区别是:

例如,SAPUI5中的许多控件会自动绑定到odata实体,这意味着它会根据odata元数据XML文件动态创建列和元组。在这种情况下,您不能使用JSON模型

恕我直言,我会选择OData,因为很多组件SAPUI5都有这种“自动绑定”。但是,我也遇到了OData实体结构不好的情况,这意味着一些SAP UI组件所具有的“自动绑定”无法按预期工作


在这些场景中,我必须从OData中获取JSON,创建/销毁一些属性,然后绑定到提到的SAP UI组件。

两种模型都可以使用,不会产生冲突。事实上,大多数应用程序将同时使用这两种方法

您希望使用OData模型从服务器发送/检索数据。OData模型将为您构建URL。例如,如果要在不使用OData模型的情况下对数据进行过滤、排序或使用分页,则需要自己构建URL

yourUrl.com/EntitySet?$filter eq Property1='Value'&$sort= ..... &top=... etc.
如果没有OData模型,这将很困难,并且使应用程序更难维护和调试。让OData模型为您做到这一点:

ODataModel.read("/EntitySet, {
    filters: [new Filter("Property1", "EQ", "Value")]
});
不过,在我看来,OData模型的最大好处是直接从XML视图绑定

<List items="{/EntitySet}">
    <items>
        <StandardListItem title="{objectTitle}"/>
    </items>
</List>

这将自动调用后端,从实体集中检索数据,并将其绑定到列表。无需构建任何URL、进行任何调用等

使用JSON模型从OData服务检索数据只会让事情变得更加困难

但是。。。话虽如此。。。JSON模型是一个非常强大的工具。您可以使用它来存储配置数据或要在UI中保存和操作的任何数据。您可以将JSON模型用作应用程序中的小型数据库,它可以在应用程序中全局传递数据


总之,您应该使用OData模型来获取/发送数据。您应该使用JSON模型进行本地数据存储。尝试同时使用两者不会产生冲突

我自己也遇到了这个问题,所以我要问这个问题。我正在将数据绑定到一个sap.m.table,我无法使用OData将数据绑定到该表,但可以与JSON模型配合使用,并且我正在使用xml视图定义我的表,该表似乎不能很好地与ODataSmartTables()配合使用。table()与sap.m.table()不同。也就是说,您应该能够将OdataModel和JsonModel绑定到sap.m.表。请查看:@polaris
sap.ui.table.table
经过专门设计和测试,可处理通常来自OData服务的大量数据。如果无法将数据直接绑定到表,则很有可能该服务不符合OData。第二个代码段是反模式。首先,它使用
ODataModel
(而不是V2或V4),默认情况下会发送许多同步请求。其次,读取整个实体集(
“/Items”
)并通过
JSONModel
绑定它将导致重新发明轮子,更不用说多次测试了,因为
JSONModel
是客户端模型,因此错过了
ODataModel
已经提供的许多API,如(我建议接受他的回答)。