Использование Slick.Dataview только дублирует некоторые функции (сортировка, фильтрация, CRUD ..) ваших коллекций, но вы должны проверить его, чтобы увидеть, как он взаимодействует с Slick.Grid.
Если посмотреть на Slick.Grid код, который вы можете видеть, что только с помощью 3 функций из DataView .getLength(), .getItem() и .getItemMetadata() и последний не обязательный для реализации. Итак, Slick.Grid - это в основном компонент «Просмотр», только чтение «Данные» (Dataview), но где «Контроллер»?
Ну, вы должны его реализовать, и вы можете найти один пример в 'SlickGrid Example 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();
});
Этот 2 событий (onRowCountChanged, onRowsChanged) уволят при добавлении, удалении строк обновления в DataView и используя там функции вы передаете эта информация для Grid.
Так основная идея заключается в том, чтобы сделать то же самое для Mongo.Collection и, насколько я могу видеть Mongo.Cursor имеет .observeChanges(), который несколько похож на .onRowsChanged
заказ SlickGrid API в источнике в конце документа.
Чтобы справиться с вашей сетки обновляет эффективно попытаться использовать различные методы признания недействительными .invalidate (Все) Ряд (ы)() а также .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(),