Использование Slickgrid Dataview в Goldenlayout
Я могу использовать Slickgrid с обычными сетками в GoldenLayout.
Однако я пытаюсь реализовать Dataview, и у меня возникают проблемы с событием onRowCountChanged.subscribe:
var StockGridComponent = function (container, state) {
this._dataView = new Slick.Data.DataView();
this._container = container;
this._state = state;
this._grid = null;
this._columns = [...];
this._data = data;
container.on('open', this._createGrid, this);
};
StockGridComponent.prototype._createGrid = function () {
this._grid = new Slick.Grid(
this._container.getElement(),
this._dataView,
this._columns,
this._options
);
this._grid.setSelectionModel(new Slick.CellSelectionModel());
this._dataView.onRowCountChanged.subscribe(function (e, args) {
console.log(this); <-- return DataView
this._grid.updateRowCount(); <-- error: "Uncaught TypeError: Cannot read property 'updateRowCount' of undefined"
this._grid.render();
}
);
Я думаю, что моя проблема в том, что я не знаю, как вернуться к объекту _grid объекта (я не разбираюсь в Javascript).
Любой, кто использует Goldenlayout с SlickGrid Dataview, может поделиться тем, как они создают свои компоненты SlickGrid?
Спасибо.
1 ответ
Решение
Это больше похоже на проблему контекста для меня. в _createGrid
метод определения контекста внешнего this
в переменной и использовать это. подобно
StockGridComponent.prototype._createGrid = function () {
this._grid = new Slick.Grid(
this._container.getElement(),
this._dataView,
this._columns,
this._options
);
this._grid.setSelectionModel(new Slick.CellSelectionModel());
var self = this; // store the context and use later
this._dataView.onRowCountChanged.subscribe(function (e, args) {
console.log(this); <-- this here will refer to context of callback method
self._grid.updateRowCount();
self._grid.render();
}
);
Надеюсь, что это решит проблему.