灯光开关加载所有数据或同步运行异步方法
Lightswitch load all data or run a async method synchronously
我在Lighswitch应用程序中有一个带有数据的网格。网格在每一列上都有筛选列的可能性。感谢 lsEnhancedTable
现在,我正在向Web api控制器发送一个ajax请求,其中包含要导出的客户ID列表。它可以工作,但对于大量数据,它非常慢,因为我必须关闭数据的分页以获取所有可见的客户 ID,以便我可以迭代 VisualCollection。
为了优化这一点,我必须将数据分页打开到 50 条记录,以便初始加载速度快,并将数据的加载移动到保存/导出到 excel 按钮。
可能的解决方案:
- 在保存按钮单击时加载数据所有数据。为此,我必须以某种方式加载所有项目,然后才能迭代集合。
下面的代码锁定 UI 线程,因为加载更多是异步的。如何同步加载所有数据?理想情况下,我希望使用msls.showProgress进行某种进度视图。
while(3<4)
{
if (screen.tblCustomers.canLoadMore) {
screen.tblCustomers.loadMore();
}
else
break;
}
var visibleItemsIds = msls.iterate(screen.tblCustomers.data)
.where(function (c) {
return c;
})
第二种方法是打开分页,仅将用户应用的筛选器传递给 Web api 控制器,以便我可以查询数据库并仅返回筛选的记录。但我不知道该怎么做。
第三种方法是我现在正在使用的方法。关闭对视觉对象集合的分页>迭代,获取客户 ID,将其传递给控制器并返回筛选的 Excel。当有很多记录时,这不能很好地工作。
在服务器端迭代筛选的集合?我不知道在 Lighswitch 中是否有办法做到这一点?
这是客户端 javascript 的一个选项。
首先生成 OData 筛选器字符串。
var filter = "(FieldName eq " + msls._toODataString("value", ":String") + ")";
然后查询数据库。
myapp.activeDataWorkspace.ApplicationData.[TableName].filter(filter).execute().then(function (result) { ... });
相关文章:
- strongloop script.js run find in before delete方法:如何同步运行异步方法
- Javascript.同步运行多个承诺
- Angular Promise未同步运行
- 如何确保包含多个$.ajax调用的函数完全同步运行,并允许在执行时重新绘制浏览器
- 让 Frisby.js 测试同步运行
- 灯光开关加载所有数据或同步运行异步方法
- 包含功能的同步运行
- 如何在Javascript node.js中同步运行parseString()函数
- 如何将对象传递给 gulp 任务以便能够同步运行该任务
- 如何同步运行requestAnimationFrame()
- 在NodeJS中同步运行函数(MongoDB Operations/Async.js)
- setTimeout不会同步运行
- 如何在循环中同步运行AJAX(在下一次迭代之前阻塞)
- 代码没有在IE中与Jquery同步运行
- 我可以从Java在Android (v2.2及以上)上同步运行javascript
- 如何从Javascript同步运行Ajax函数
- 如何使循环中的函数同步运行
- 如何使 console.log() 在 Phantomjs 中同步运行
- NodeJs MongoDB嵌套查询-同步运行回调
- 多个Ajax在每个循环中同步运行