JSONModel有$ top和$ skip像OData一样吗?

时间:2017-06-06 19:20:08

标签: sapui5

在我的应用程序中,我正在从JSON文件中读取数据并从中创建模型

var myModel = new sap.ui.model.JSONMOdel("pathToJson");

我有300个值,但我只想阅读50,有没有办法做到这一点。我知道我可以使用$ top和$ skip来使用OData选择一组特定的值。 API提供了函数myModel.loadData(),其中包含参数oParameters但我不知道我可以传入什么。有谁知道这是否可能?

1 个答案:

答案 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结合使用,那么你需要创建一种新型的模型 - 这不是一件容易的事。