在我的应用程序中,我正在从JSON文件中读取数据并从中创建模型
var myModel = new sap.ui.model.JSONMOdel("pathToJson");
我有300个值,但我只想阅读50,有没有办法做到这一点。我知道我可以使用$ top和$ skip来使用OData选择一组特定的值。 API提供了函数myModel.loadData(),其中包含参数oParameters但我不知道我可以传入什么。有谁知道这是否可能?
答案 0 :(得分:1)
JSON模型是客户端模型。这意味着只需一个请求即可立即加载所有数据。在标准实现中,它没有读取分页JSON内容的方法(使用top / skip或您可能给它们的任何其他名称)。
您已经说过要加载的JSON文件。因此,从技术角度来看,这样的分页甚至没有意义。这是因为您不能(轻松地)使用仅客户端代码(特别是JSON,如果您正在读取其片段时无效)加载静态文件的一部分。
如果您实际上只想在模型中存储文件的一部分,则只需使用jQuery.ajax然后slice数组读取整个文件。
如果您确实拥有RESTful Web服务,那么分页机制应该是此服务的一部分(例如,它应该有一些路径或查询参数来指定分页参数)。此服务应为每个调用返回有效的JSON文档。在客户端,您可以借助某些功能(例如在控制器中)使用此类服务:
onInit: function () {
this.setModel(new JSONModel([])); // initially an emty array
},
//call this method when you want to read a page
onReadDataPage: function (iTop, iSkip) {
// use jQuery.ajax or jQuery.get to read a "page" of data; e.g.
jQuery.ajax({
url: "your service path",
data: {
top: iTop,
skip: iSkip || 0
},
success: this.onDataReceived.bind(this)
});
},
onDataReceived: function (aData) {
var oModel = this.getModel();
oModel.setData(oModel.getData().concat(aData);
}
如果你想将这个与具有不断增长的功能的List结合使用,那么你需要创建一种新型的模型 - 这不是一件容易的事。