SlickGrid 100% высота родителя?
Я пытаюсь использовать SlickGrid С jQuery Layout UI, и я хочу, чтобы SlickGrid занимал 100% высоту родительской панели.
проблема в том, что при создании экземпляра SlickGrid у него нет строк (часть моего интерфейса ajax загружается в данные позже, а не при загрузке страницы), поэтому высота по умолчанию устанавливается примерно в 1px (плюс высота заголовков). Когда я загружаю данные позже, я не вижу ни одной из строк.
Я попытался установить Элемент SlickGrid DOM в height: 100%;
, но это ничего не даст. Как я могу заставить холст SlickGrid занимать 100% высоту панели, в которой он живет, даже если у него меньше строк данных?
5 ответов
Я закончил работу вокруг этого, используя комбинацию jQuery PubSub, методы доступа к макету пользовательского интерфейса и SlickGrid resizeCanvas()
метод. Кажется, работает довольно хорошо.
Примечание: мой проект уже использовал pubsub, и я загружаю в свои модули, используя RequireJS.
Итак, в моем файле модуля сетки я подписываюсь на метод получения новой внутренней высоты панели, в которой он живет, что сохраняет его в локальной переменной, а затем вызывает my resize();
функция:
$.subscribe("units/set_grid_height", function (new_height) {
grid_opts.height = new_height;
resize();
});
// ...
// grid = the jQuery element that represents the SlickGrid
// slick = the instantiated slickgrid
function resize() {
grid.css('height', grid_opts.height);
slick.resizeCanvas();
}
затем в моем файле init js (где определен макет) я настраиваю правильную публикацию для начального состояния и каждый раз, когда центральная панель изменяется:
layout = $('body').layout({
center: {
onresize: function (name, el, state, opts, layout_name) {
$.publish("units/set_grid_height", [state.innerHeight]);
}
}
});
$.publish("units/set_grid_height", [layout.state.center.innerHeight]);
это, кажется, делает именно то, что я хочу. Я знаю, что это не общее решение, но не похоже, что SlickGrid может сделать все это самостоятельно.
Я собираюсь дать ответ, который даже мне не нравится, но мои навыки javascript ограничены, и это решение, которое я использую, пока не найду что-то лучше.
в основном, я беру высоту документа и вычитаю высоту любых других элементов за пределами slickgrid, например:
$("#id-of-slickgrid-container").height(
$(document).height() -
$("#header").outerHeight() -
$("#nav").outerHeight() -
$("#footer").outerHeight() - 44
);
"44" - это фальсифицированное число, которое достаточно близко к высоте дополнительного пространства, используемого внутри slickgrid, и т. д.
для таких, как я, кто получил аналогичную ошибку, но разные обстоятельства:
с wiki - "явные ширина и высота на контейнере slickgrid требуются в разметке, в противном случае тело сетки не отображается (высота:1px), и сетка получает ширину заголовка сетки (ширина:100000px)."
поэтому не забудьте дать основной сетке div ширину и высоту !
PS: Не думаю, что это относится к этому вопросу, но это было единственный вопрос, который выскочил при поиске "slick grid 1px bug": -/
магия чисел, но, по крайней мере, вам не нужно знать о конкретных контейнерах.
HTML:
<div id="myGridSizer"></div>
<div id="myGrid"></div>
CSS:
#myGrid {
width: 100%;
}
#myGridSizer {
top: 73px;
bottom: 73px;
width: 0;
position: absolute;
}
JavaScript:
$("#myGrid").height($('#myGridSizer').outerHeight());
grid = new Slick.Grid("#myGrid", dto.data, dto.columns, options);
Я надеюсь, что этот ответ по-прежнему полезен, я наткнулся на него в другом ответе:https://stackoverflow.com/a/10878955/4606828
в опции Slickgrid добавить autoHeight
:
options = {
...
autoHeight: true
};
Slickgrid всегда будет расти с его содержанием, и вы можете установить высоту родителя на что угодно.