我正在使用JSONModel
从HANA读取数据,只需将URL传递给源并按以下方式检索它:
var data = new sap.ui.model.json.JSONModel(urlPath);
然后我可以将它绑定到我的观点:this.getView().setModel(data);
我还看到了以下方法:创建ODataModel
,然后根据数据创建JSONModel
。
var oModel = new sap.ui.model.odata.ODataModel(urlPath);
oModelJson = new sap.ui.model.json.JSONModel();
oModel.read("/Items",
null,
["$filter=ImItems eq 'imputParameter'"],
null,
function(oData, oResponse) {
oModelJson.setData(oData);
},
null
);
首先创建ODataModel
而不是一次创建JSONModel
有什么不同。所以假设我从数据库中回来了大约5,000个数据点,我应该采用哪种方法,还是没有区别?
答案 0 :(得分:2)
JSONModel
是一个客户端模型,用于获取数据并将数据设置为JSON格式的视图。
ODataModel
是OData协议的模型实现。
这允许对OData实体进行CRUD操作。 JSONModel
不支持Create / Update / Delete / Batch次操作。
所以来到你的场景,我建议总是使用ODataModel
进行CRUD操作(包括读取)。然后可以使用JSON模型绑定数据进行查看。
请注意,最好每个应用有一个ODataModel
,并且多个JSONModel
绑定到视图。
考虑使用ODataModel V2
,因为您已经提到过要处理5K数据点,如果您没有使用UI中的所有数据。使用setSizeLimit
确保已设置正确的上限。
答案 1 :(得分:2)
两种型号都可以毫无冲突地使用。实际上,大多数应用程序都会同时使用它
您希望使用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模型进行本地数据存储。试图同时使用两者都不会有冲突。
答案 2 :(得分:1)
两者之间的一个主要区别是:
例如,SAPUI5中的许多控件smarttable自动绑定到odata实体,这意味着它会根据Odata元数据XML文件动态创建列和元组。在这种情况下,您不能使用JSON模型。
恕我直言,我会选择OData,因为SAPUI5有很多组件的“自动绑定”。但是,当OData实体结构不好时,我也遇到了一些情况,这意味着某些SAP UI组件的“自动绑定”没有按预期工作。在这些场景中,我不得不从OData中获取JSON,创建/销毁了一些属性,然后我对所提到的SAP UI组件进行了绑定。