Javascript Gridstack-如果我在重新初始化之前销毁网格,则后者将失败 代码
注意:此处发布的所有函数都位于同一个文件Javascript Gridstack-如果我在重新初始化之前销毁网格,则后者将失败 代码,javascript,gridstack,Javascript,Gridstack,注意:此处发布的所有函数都位于同一个文件interface.js中 我添加了一个事件侦听器,每次调整窗口大小时都会执行该侦听器: window.addEventListener("resize", function(_resize){ _window_resize_handler(_resize); } ); 当事件调整大小发生时,处理程序函数\u window\u resize\u handler()确定(a)窗口是否足够宽,以及(b)是否
interface.js
中
我添加了一个事件侦听器,每次调整窗口大小时都会执行该侦听器:
window.addEventListener("resize",
function(_resize){
_window_resize_handler(_resize);
}
);
当事件调整大小发生时,处理程序函数\u window\u resize\u handler()
确定(a)窗口是否足够宽,以及(b)是否在移动/桌面上。基于此,它调用两个Gridstack.js初始化函数之一(一个用于桌面,一个用于移动):
对于移动设备:
function _gridstack_init_desktop(){
// Create global object "grid" with window.
window.grid = GridStack.init({
acceptWidgets: false,
alwaysShowResizeHandle: true,
animate: false,
auto: true,
// cellHeight: "15.45rem",
// column: 12,
disableDrag: false,
disableOneColumnMode: true,
disableResize: false,
draggable: true,
dragOut: false,
float: true,
handle: '.grid-stack-item-content',
handleClass: 'grid-stack-item-content',
itemClass: 'grid-stack-item',
maxRow: 6,
minRow: 6,
minWidth: 768,
oneColumnDomSort: false,
placeholderClass: 'grid-stack-placeholder',
placeholderText: '',
resizable: {
autoHide: false,
handles: 'n, nw, w, sw, s, se, e, ne'
},
removeable: false,
removeTimeout: 2000,
//row: 6,
rtl: false,
staticGrid: false,
});
grid.column(12);
grid.cellHeight("15.45rem");
}
function _gridstack_init_mobile(){
// Create global object "grid" with window.
window.grid = GridStack.init({
acceptWidgets: false,
alwaysShowResizeHandle: true,
animate: false,
auto: true,
// cellHeight: "15.45rem",
// column: 12,
disableDrag: false,
disableOneColumnMode: false,
disableResize: false,
draggable: true,
dragOut: false,
float: true,
handle: '.grid-stack-item-content',
handleClass: 'grid-stack-item-content',
itemClass: 'grid-stack-item',
maxRow: 72,
minRow: 6,
minWidth: 768,
oneColumnDomSort: false,
placeholderClass: 'grid-stack-placeholder',
placeholderText: '',
resizable: {
autoHide: false,
handles: 'n, nw, w, sw, s, se, e, ne'
},
removeable: false,
removeTimeout: 2000,
//row: 6,
rtl: false,
staticGrid: false,
verticalMargin: "0",
});
grid.column(1);
grid.cellHeight("47.15vh");
}
结果
这部分是可行的,但只有在Chrome开发工具中,我在所有触发\u gridstack\u init\u mobile()
的屏幕之间进行调整时,它才起作用。这些主要是手机屏幕:
当我选择触发\u gridstack\u init\u desktop()
的iPad屏幕时,初始化过程中出现了一些问题,我得到的是1列而不是12列(左图)。但如果我刷新了所有内容,并且得到了12列(右图):
我的猜测
我的推测是,我需要销毁grid
对象(如果存在),然后再将其重新初始化为Gridstack对象。这就是为什么我试图将这部分代码放在\u gridstack\u init\u mobile()
和\u gridstack\u init\u mobile()
的顶部:
但我有一个错误:
interface.js:372 Uncaught ReferenceError: grid is not defined
at _gridstack_init_desktop (interface.js:372)
at _window_resize_handler (interface.js:359)
at interface.js:8
有人知道吗?如果只需要更改列号,为什么要销毁?(其中有一个API)removeAll(removeDOM=true)
否则会删除网格堆栈信息。
即使没有apigrid.opts.maxRow=72
,您也可以更改任何属性,只是在下一个操作发生之前,如果需要更改,您不会执行任何代码
如果库中有一个bug,你应该创建一个最小的可复制案例,并将其作为bug发布,而不是期望有人读取你的堆栈溢出Q。。。你也没有说出你的rev使用的是什么。试试2.0.0,一眼就可以看出您使用了12列,但网格最初只有一列,而且您不能多次初始化同一个网格,但您可以设置列(1),删除dom元素会破坏所有内容,甚至不会显示dom的开头。也不要使用世界上的选项初始化,只有非默认选项(否则很难阅读)。感谢您提供的信息。首先初始化Gridstack对象grid
,然后执行grid.opts.maxRow=72代码>但网格不变。我正在使用Gridstack 1.2.2。
if (document.getElementsByClassName('grid-stack').length != 0){
grid.destroy();
}
interface.js:372 Uncaught ReferenceError: grid is not defined
at _gridstack_init_desktop (interface.js:372)
at _window_resize_handler (interface.js:359)
at interface.js:8