tho*_*sf1 8 javascript slickgrid meteor minimongo
SlickGrid专注于显示表或数组中的数据,这很棒.Meteor专注于操纵数据,但使用Minimongo.SlickGrid如何与Minimonogo系列集成并保留其快速显示和大数据处理功能?
我目前的做法感觉不对,有点难看.我有一个单独的SlickGrid数组,并编写一些胶水代码来处理更新事件:
如何将Meteor数据光标直接绑定到SlickGrid并仅处理带有某些粘合代码的事件?或者可以使用Slick.dataview吗?目标是处理单元级别的更新.
使用 Slick.Dataview 只会重复集合的某些功能(排序、过滤、CRUD...),但您应该检查它以了解它如何与 Slick.Grid 交互。
如果你看一下 Slick.Grid 代码,你会发现它只使用了 Dataview .getLength()、.getItem()和.getItemMetadata() 3 个函数,最后一个不是强制实现的。所以 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();
});
Run Code Online (Sandbox Code Playgroud)
当您在 Dataview 中添加、删除、更新行并使用将信息传递到网格的函数时,这 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,
Run Code Online (Sandbox Code Playgroud)
如果您需要用户与网格交互,请订阅事件并相应地更新您的集合。
"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(),
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1030 次 |
| 最近记录: |