如何将 SlickGrid 与 Meteor.js 反应式集合集成
How can I integrate SlickGrid with Meteor.js reactive collections?
SlickGrid专注于显示表或数组中的数据,这很棒。Meteor专注于操纵数据,但使用Minimongo。SlickGrid如何与Minimonogo集合集成并保持其快速显示和大数据处理能力?
我目前的做法感觉不对,有些丑陋。我有一个单独的 SlickGrid 数组,并编写了一些胶水代码来处理更新事件:
- 排序:由 Meteor 处理,触发完全刷新(重新设置数据)
- 添加/更新/删除:找出索引并将其失效
- 过滤:由 Meteor 处理,触发完全刷新(重新设置数据)
如何将 Meteor 数据光标直接绑定到 SlickGrid 并仅处理带有一些胶水代码的事件?或者可以使用Slick.dataview吗?目标是在单元级别处理更新。
使用 Slick.Dataview 只会复制集合的某些功能(排序、过滤、CRUD.),但您应该查看它如何与 Slick.Grid 交互。
如果你看一下Slick.Grid代码,你会发现它只使用了Dataview的3个函数。.getLength()、.getItem() 和 .getItemMetadata() 以及最后一个不是强制性的。所以Slick.Grid基本上是"视图"组件,只读取"数据"(Dataview),但"控制器"在哪里?
好吧,你要实际实现它,你可以在"SlickGrid示例4"中找到一个例子。
该示例最重要的部分在此代码段中:
// wire up model events to drive the grid
dataView.onRowCountChanged.subscribe(function (e, args) {
grid.updateRowCount();
grid.render();
});
dataView.onRowsChanged.subscribe(function (e, args) {
grid.invalidateRows(args.rows);
grid.render();
});
当您在 Dataview 中添加、删除、更新行并使用那里的函数将该信息传递给 Grid 时,将触发这 2 个事件(onRowCountChanged、onRowsChanged)。
所以基本的想法是为您的Mongo.Collection做同样的事情,据我所知,Mongo.Cursor已经.observeChanges() 有点类似于 .onRowsChanged
在文档末尾的源代码中签出 SlickGrid API。
为了有效地处理网格更新,请尝试使用不同的失效方法.invalidate(All)Row(s)()以及.updateRow()和.updateCell()进行更精确的控制。
这些主要是处理视图更新的方法:
"render": render,
"invalidate": invalidate,
"invalidateRow": invalidateRow,
"invalidateRows": invalidateRows,
"invalidateAllRows": invalidateAllRows,
"updateCell": updateCell,
"updateRow": updateRow,
"getViewport": getVisibleRange,
"getRenderedRange": getRenderedRange,
"resizeCanvas": resizeCanvas,
"updateRowCount": updateRowCount,
"scrollRowIntoView": scrollRowIntoView,
"scrollRowToTop": scrollRowToTop,
"scrollCellIntoView": scrollCellIntoView,
"getCanvasNode": getCanvasNode,
"focus": setFocus,
如果您需要用户与网格交互,请订阅事件并相应地更新您的集合。
"onScroll": new Slick.Event(),
"onSort": new Slick.Event(),
"onHeaderMouseEnter": new Slick.Event(),
"onHeaderMouseLeave": new Slick.Event(),
"onHeaderContextMenu": new Slick.Event(),
"onHeaderClick": new Slick.Event(),
"onMouseEnter": new Slick.Event(),
"onMouseLeave": new Slick.Event(),
"onClick": new Slick.Event(),
"onDblClick": new Slick.Event(),
"onContextMenu": new Slick.Event(),
"onKeyDown": new Slick.Event(),
"onAddNewRow": new Slick.Event(),
"onValidationError": new Slick.Event(),
"onViewportChanged": new Slick.Event(),
"onColumnsReordered": new Slick.Event(),
"onColumnsResized": new Slick.Event(),
"onCellChange": new Slick.Event(),
"onActiveCellChanged": new Slick.Event(),
"onActiveCellPositionChanged": new Slick.Event(),
"onDragInit": new Slick.Event(),
"onDragStart": new Slick.Event(),
"onDrag": new Slick.Event(),
"onDragEnd": new Slick.Event(),
"onSelectedRowsChanged": new Slick.Event(),
- 使用代码了解 JavaScript 中的反应式扩展
- 如何使metrojs反应式froala编辑器在其值更改时进行更新
- 函数反应式编程(FRP)可以用单子来表达吗?
- 在 DOM 被反应式模板数据更改后,Meteor 调用 JS
- 更改 ul 列表中的反应式链接
- 流星反应式嵌套对象更新父对象
- JS中的反应式流如何工作
- MeteorJS和x可编辑反应式模板
- 流星,更新时的反应式数组渲染问题
- 反应式,<输入>上的两个绑定
- 当$scope更改时重新运行反应式帮助程序
- 如何将 SlickGrid 与 Meteor.js 反应式集合集成
- 什么是对列表重新排序进行动画处理.js反应友好方式
- 有一些方法可以使用Node JS流式传输照片
- React(来自Facebook的应用程序框架)和react.js(JS的反应式扩展)之间有什么区别/相似之处
- 流星:我可以在模板助手之外使用反应式变量吗?
- Angular的反应式下拉菜单
- 将结构化的反应式数据发布到客户端(在数据库集合之外)
- Node.js:流式远程文件到文件下载
- 反应式编程与事件驱动编程有何不同