The readAPI 等待选项图作为第二个参数,我们可以使用该属性定义任何查询urlParameters
:
oModel1.read("/LinesSet", {
urlParameters: {
"$expand": "ToCells",
"$select": "LineID,ToCells/CellID,...", // reduce data load
},
filters: [ // Filter required from sap/ui/model/Filter
new Filter({/*...*/}), // reduce data load
],
success: this.onSuccess.bind(this),
// ...
});
⚠️ 请注意,加载大量数据会对内存消耗和用户体验产生负面影响。这甚至可能最终导致应用程序完全崩溃。参见 参考资料 部分加载大量数据从文档中。
每当您使用诸如 [...] 之类的方法时sap.ui.model.odata.v2.ODataModel#read
[...]在应用程序代码中,您的应用程序不得加载大量数据。
⚠️ read
从应用程序的角度来看,它是一个低级 API。还有其他 API 和方法可以帮助减少控制器代码量。
替代(更好)的解决方案
我想强调的是v2.ODataModel#read
经常not必需的。您可以通过分配相应的名称来简单地使用 OData Context/ListBinding<NavigationProperty>
XML 中的控件:
<Table binding="{ToThatRelatedSingleEntity}" items="{ToThatRelatedCollection}" growing="true">
(Note: You might have to add templateShareable
to the aggregation binding accordingly as explained in the topic: Lifecycle of Binding Templates)
绑定,而不是应用程序,将自动为您准备请求。无需使用中间体JSONModel
。与相同v4.ODataModel
甚至没有read
method.
这也使得迁移到 OData V4 变得更加容易。