如何阻止Qlik拖放自定义扩展对象时的默认“替换为”“转换为”行为?
阻止Qlik自定义扩展拖放时的“替换为/转换为”行为
要解决这个问题,你可以通过两种方式实现:
方法一:利用扩展的support配置项(推荐)
Qlik扩展的定义支持support属性,直接设置其中的replace和convert为false,就能禁用默认的替换与转换提示:
define( ["qlik"], function(qlik) { return { initialProperties: { // 你的扩展初始属性,比如导出相关配置 }, definition: { // 你的扩展属性面板定义 }, paint: function($element, layout) { // 你的扩展渲染逻辑 }, // 核心配置:禁用替换和转换 support: { replace: false, convert: false, export: true // 保留导出功能,适配你的扩展用途 } }; });
这个配置是Qlik扩展的内置支持项,设置后拖放你的扩展时,不会触发“替换为”或“转换为”的弹窗,直接创建新的扩展对象。
方法二:拦截拖放事件(备用方案)
如果上述方法不生效,可以通过监听Qlik应用的drop事件,手动阻止默认行为并创建新对象:
define( ["qlik"], function(qlik) { return { initialProperties: { /* ... */ }, definition: { /* ... */ }, paint: function($element, layout) { /* ... */ }, init: function() { const currentApp = qlik.currApp(this); // 监听应用内的拖放事件 currentApp.model.on("drop", function(event) { // 确认拖放的是你的扩展类型 if (event.data?.qInfo?.qType === "your-extension-id") { // 阻止默认的替换/转换逻辑 event.preventDefault(); // 手动创建新的扩展对象 currentApp.createObject({ qInfo: { qType: "your-extension-id" }, // 扩展的其他初始属性 }).then(newObj => { // 将新对象添加到拖放位置 const activeSheet = qlik.navigation.getCurrentSheet(); activeSheet.addObject(newObj.id, event.pos.x, event.pos.y); }); } }); } }; });
注意把代码里的your-extension-id替换成你实际的扩展ID(也就是扩展文件夹的名称)。
内容的提问来源于stack exchange,提问作者user1518071
相关产品推荐
相关产品推荐

