gpt4 book ai didi

javascript - 如何从 dataTransfer 获取对象数据?

转载 作者:行者123 更新时间:2023-12-02 21:18:05 29 4
gpt4 key购买 nike

我执行以下操作:

const blockOrField  = new Block();
ev.dataTransfer.setData("data", blockOrField);

当我在另一个地方获取数据时:

cosnt data = e.dataTransfer.getData("data");

我将data作为[object Object]而不是真实的实例。

在传递给数据之前,我看到它是实例:

 if (blockOrField instanceof FieldDefinition) {
alert("works");
}

ev.dataTransfer.setData("data", blockOrField);

我知道它应该序列化为字符串 JSON,但我有复杂的组合实例。

最佳答案

如果您查看 setData() 的文档它特别指出“一个 DOMString 表示要添加到拖动对象的数据。”。所以你试图在那里存储对象引用是不走运的。

我在这里要做的是在某处创建另一个对象,并用 id 存储所需的引用。

const dataTransferCache = {};

function onDragStart(ev) {
const block = new Block();
const id = GetRandomId(); // Just get an id somehow
dataTransferCache[id] = block;
ev.dataTransfer.setData("data", id);
}

function onDragEnd(ev) {
const id = ev.dataTransfer.getData("data");
const block = dataTransferCache[id];
delete dataTransferCache[id]; // Remove the value again
}

如果需要的话,这甚至可以支持多点触摸拖动。如果需要在组件之间共享,您可以简单地将 dataTransferCache 放在单独的文件中,并在两个组件中包含对 in 的引用。

关于javascript - 如何从 dataTransfer 获取对象数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60916568/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com