找回密码
 立即注册

QQ登录

只需一步,快速开始

pian493

初级会员

42

主题

71

帖子

351

积分

初级会员

积分
351
pian493
初级会员   /  发表于:2022-11-10 16:21  /   查看:944  /  回复:3
1金币
代码如下,其中sheet.shapes.group方法执行后,shapeRemoved事件触发了,预期是不触发。请问怎么解决?


const {row,col,rowCount,colCount} = selectedAreaInfo;const {left,right,top,bottom} = calcPositionOfSelectedArea(selectedAreaInfo);
const shapeColor = 'red';
const shapeName = 'shapeName';

const sheet = getActiveSheet_tool();
let groupShapes = [
    {
        flag:"_top",
        params:[left, top, right, top]
    },
    {
        flag:"_bottom",
        params:[left, bottom, right, bottom]
    },
    {
        flag:"_left",
        params:[left, top, left, bottom]
    },
    {
        flag:"_right",
        params:[right, top, right, bottom]
    }
].map(item=>{
    let tempShape = sheet.shapes.addConnector(shapeName + item.flag,
      GC.Spread.Sheets.Shapes.ConnectorType.straight, ...item.params);
    let oldStyle = tempShape.style();
    oldStyle.line.color = shapeColor;
    tempShape.style(oldStyle);
    return tempShape;
})


let gShape = sheet.shapes.group(groupShapes); //触发了shapeRemoved事件
return false;

let nameTemp = shapeName + "_group_" + new Date().getTime();
gShape.name(nameTemp);


// if(/*打上tag之前调用*/isShapesHaveIntersection()){
//     removeOneShape(nameTemp,false);//不可删除交集上的tag
//     return toastr.warning('不可以有交集哦')
// }

gShape.allowMove(false);
gShape.allowResize(false);
gShape.allowRotate(false);

//shape里的cell设置tag
for(let i=row;i<row+rowCount;i++){
    for(let j=col;j<col+colCount;j++){
        const {shapeName} = getTag_tool(i,j);
        setTag_tool(i,j,{shapeName: shapeName ? [nameTemp,shapeName].join(window.defineVarObj_g.shapeNameSeparator) : nameTemp});
    }
}

shapesInfoHandler_shapeHelper({type:'addShape',shapeName:nameTemp,cellsInfo:{/*row,col,*/rowCount,colCount}});

最佳答案

查看完整内容

可以监听ShapeRemoving事件,内有isGroup属性可以判断是否是由group引起的删除。 示例代码如下: API: https://demo.grapecity.com.cn/spreadjs/help/api/classes/GC.Spread.Sheets.Events#shaperemoving

3 个回复

倒序浏览
最佳答案
最佳答案
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-10 16:21:01
来自 4#
pian493 发表于 2022-11-11 09:12
有个这样的需求,选中某个形状,按delete键删除该形状,此时需清空形状内的tag。但现在addConnector + gr ...

可以监听ShapeRemoving事件,内有isGroup属性可以判断是否是由group引起的删除。
示例代码如下:
  1. sheet.bind(GC.Spread.Sheets.Events.ShapeRemoving, function (e, info) {
  2.         if(info.isGroup == true) {
  3.             alert("group,不删除tag")
  4.         } else {
  5.             alert("删除tag")
  6.         }
  7. });
复制代码
API:
https://demo.grapecity.com.cn/sp ... vents#shaperemoving
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-10 17:56:55
2#
您好,

这属于产品设计,执行group方法表示对两个形状进行了组合,如下图,即原先的两个形状被删除了,生成了一个新的形状。
形状被删除了自然会触发ShapeRemoved事件。

您为什么不想触发ShapeRemoved事件呢?可以结合实际业务场景详细描述下,这边调研看看是否有其他方案。

回复 使用道具 举报
pian493
初级会员   /  发表于:2022-11-11 09:12:17
3#
Lynn.Dou 发表于 2022-11-10 17:56
您好,

这属于产品设计,执行group方法表示对两个形状进行了组合,如下图,即原先的两个形状被删除了, ...

有个这样的需求,选中某个形状,按delete键删除该形状,此时需清空形状内的tag。但现在addConnector + group 也会触发shapeRemoved。导致无法根据shapeRemoved事件来区分 group 和 delete。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部