javascript - 从 JSON 加载 Gridstack ID
问题描述
我有一个正在处理的 gridstack 项目,我可以手动添加具有不同内容的小部件。我可以按照我的意愿布置它们,然后保存布局。我可以随时将布局加载回上一个保存点。这是它的一个小提琴: https ://jsfiddle.net/m9rvcsu1/
我的问题是,当我加载布局时,坐标和大小是正确的,但是小部件的内容是错误的。所有小部件内容都设置回默认小部件。
我相信我的问题是由这条线引起的:
myGrid.load(JSON.parse($('#tile-placement-string').val()), '#default-tile');
所以要解决这个问题,我想我需要将每个小部件的 id 加载到我用来保存/加载位置的 json 字符串中?我怎样才能正确地做到这一点?
这就是我的 json 的样子: [{"x":0,"y":0,"width":2,"height":2},{"x":2,"y":0,"width" :2,"height":2},{"x":4,"y":0,"width":2,"height":2}]
这是我的保存功能,以及调用它的点击功能:
function save() {
return $.makeArray($(id + ' > .grid-stack-item:visible')).map(function (v) {
var n = $(v).data('_gridstack_node');
return n ? { x: n.x, y: n.y, width: n.width, height: n.height } : null; //add in ability to store tile id for content loading
});
}
$('#save-grid').click(function () {
$('#tile-placement-string').val(JSON.stringify(myGrid.save())); //save tile coordinates as json
});
这是我加载数据的方式:
function load(data, defaultTile) {
gridObj.removeAll();
$.each(data, function (k, v) { addTile(defaultTile, v.x, v.y, v.width, v.height); });
}
$('#load-grid').click(function () {
myGrid.load(JSON.parse($('#tile-placement-string').val()), '#default-tile'); //load tile coordinates from json string
});
更多上下文可以在我的小提琴中找到。
要重现问题:
单击编辑 UI,然后单击图表 1,然后单击图表 2
单击编辑 UI,然后单击保存
点击 Edit UI,然后点击 Load(注意所有的 tile 内容都已更改为默认 tile)
任何帮助表示赞赏!
解决方案
首先,让我们data-gs-id
根据方法中的文档addTile
设置属性:
gridObj.addWidget(tile, x, y, w, h, null, null, null, null, null, defaultTile);
然后,让我们读取并保存在save
方法中:
var gsId = $(v).data('gs-id');
return n ? { x: n.x, y: n.y, width: n.width, height: n.height, id: gsId } : null;
最后,让我们用它来加载load
方法:
$.each(data, function (k, v) { addTile(v.gsId || defaultTile, v.x, v.y, v.width, v.height); });
推荐阅读
- javascript - 倒计时嵌入简单的html
- r - 是否有一个 R 函数可以像问题(即帮助)函数一样轻松显示文本
- docker - 在 docker 容器上运行 powershell 或 cmd
- haskell - 如何用 CallStack 抛出异常?
- jakarta-ee - 从每个请求中自动提取 URL 组件
- javascript - 带有 useEffect 的 ReactJS 不呈现每个状态
- excel - Excel VBA - 错误:未设置对象变量或块变量
- c++ - 这个递归函数是如何工作的?合并排序两个单链表
- python - 如何在不查看文件内容的情况下编写代码来确定 CSV 文件中的 EOL 字符是“\r”还是“\n”?
- visual-studio - 警告消息 - 缓慢构建