Azure移动服务中的增量加载

时间:2014-01-28 14:40:55

标签: azure azure-mobile-services

给出以下代码:

listView.ItemsSource = 
App.azureClient.GetTable<SomeTable>().ToIncrementalLoadingCollection();

我们无需进一步更改即可获得增量加载。

但是如果我们将read.js服务器端脚本修改为例如使用mssql来查询另一个表。增量加载会发生什么?我假设它休息了;如果是这样,又需要什么来支持它呢?

如果查询使用的是无类型版本,例如,

App.azureClient.GetTable("SomeTable").ReadAsync(...)

在这种情况下可以以某种方式支持增量加载,还是必须以某种方式“手动”完成?

有关Azure移动服务如何在服务器和客户端之间实现增量加载的见解的加分点。

1 个答案:

答案 0 :(得分:1)

增量加载集合通过发送$ top和$ skip查询参数(当您使用表中的.Take.Skip方法进行查询时也会发送这些参数)。因此,如果您希望修改读取脚本以执行除默认行为之外的操作,同时仍然保持将该表与增量加载集合一起使用的能力,则需要考虑这些值。

为此,您可以要求查询组件,其中包含值,如下所示:

function read(query, user, request) {
    var queryComponents = query.getComponents();
    console.log('query components: ', queryComponents); // useful to see all information
    var top = queryComponents.take;
    var skip = queryComponents.skip;
    // do whatever you want with those values, then call request.respond(...)
}

在客户端实现的方式是使用实现ISupportIncrementalLoading interface的类。您可以在GitHub repository中看到它(以及客户端SDK的完整源代码),或者更具体地说是MobileServiceIncrementalLoadingCollection class(该方法作为MobileServiceIncrementalLoadingCollectionExtensions class中的扩展名添加)。< / p>

并且无类型表没有该方法 - 正如您在扩展类中看到的那样,它只被添加到表的类型化版本中。