【发布时间】:2026-01-16 11:15:02
【问题描述】:
我正在尝试在 Backgrid 单元格内使用 this Bootstrap Datetime Picker(版本 4.17.37),但我遇到了小部件呈现方式的问题。该小部件显示为单元格正下方的薄弹出窗口,但内部似乎没有内容。但是,如果您将小部件的内部 html 记录到控制台,则内容就在那里。在我看来,日期时间选择器的place 函数内部发生了一些不寻常的事情,显示为here。
这是我的自定义 Backgrid 单元格及其编辑器的代码。
// Editor for the datetime picker cell.
var DatetimePickerCellEditor = Backgrid.InputCellEditor.extend({
events: {},
initialize: function() {
Backgrid.InputCellEditor.prototype.initialize.apply(this, arguments);
var input = this;
var timezone = 'America/Lima',
format = 'YYYY-MM-DD HH:mm';
this.$el.datetimepicker({
format: format,
timeZone: timezone
}).on('dp.show', function(event) {
event.preventDefault();
var column = input.column.get('name'),
date = input.model.get(column);
input.$el.data("DateTimePicker").date(date);
}).on('dp.hide', function(event) {
event.preventDefault();
var dateObj = event.date,
dateLocal = null;
if (dateObj) {
var dateString = dateObj.format(format);
dateLocal = moment.tz(dateString, timezone);
}
var command = new Backgrid.Command({}),
column = input.column.get("name");
// Save date in model as string in local time.
input.model.set(column, dateLocal.format());
input.model.trigger("backgrid:edited",
input.model,
input.column,
command);
command = input = null;
}).on('dp.error', function(error) {
console.log(error)
});
}
});
// Cell to display the datetime picker.
var DatetimePickerCell = Backgrid.Cell.extend({
editor: DatetimePickerCellEditor
});
这会产生以下结果:
经检查,日期时间选择器用作父元素的元素是祖先 <div class="col-lg-12 col-md-12">。然后我尝试通过给单元格一个{ position: relative } CSS 属性来解决这个问题。这确实使日期时间选择器将单元格用作父单元,但在视觉上产生了以下结果:
您可以看到选择器似乎在单元格下方,但不可见。
使用其他属性(例如 widgetParent 和 widgetPositioning)得到了类似的结果。
【问题讨论】:
-
有问题的单元格是否有
overflow:hidden? -
确实如此,但是覆盖它以具有
overflow: visible会产生类似于第一个屏幕截图的效果。也就是说,小部件在单元格下方显示为一个细气泡。
标签: backbone.js bootstrap-datetimepicker backgrid