Использование 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();
  }
); 

Надеюсь, что это решит проблему.

Другие вопросы по тегам