给出以下代码:
listView.ItemsSource =
App.azureClient.GetTable<SomeTable>().ToIncrementalLoadingCollection();
我们无需进一步更改即可获得增量加载。
但是如果我们将read.js服务器端脚本修改为例如使用mssql来查询另一个表。增量加载会发生什么?我假设它休息了;如果是这样,又需要什么来支持它呢?
如果查询使用的是无类型版本,例如,
App.azureClient.GetTable("SomeTable").ReadAsync(...)
在这种情况下可以以某种方式支持增量加载,还是必须以某种方式“手动”完成?
有关Azure移动服务如何在服务器和客户端之间实现增量加载的见解的加分点。
答案 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>
并且无类型表没有该方法 - 正如您在扩展类中看到的那样,它只被添加到表的类型化版本中。