首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Gojs中编辑滚动表行中的任何文本时,如何获得行值?

在Gojs中编辑滚动表行中的任何文本时,如何获得行值?
EN

Stack Overflow用户
提问于 2017-07-20 14:10:32
回答 2查看 216关注 0票数 0

我在Gojs用滚动表工作。我已经为我的表设置了属性"editable: true"。现在,假设我在行的任何列中编辑了文本,那么如何获得整行的数据或编辑的文本?如果你知道的话请告诉我。

这是我的代码:

代码语言:javascript
代码运行次数:0
运行
复制
            var nodeJson;
        var $ = go.GraphObject.make;
        var inputFieldTable = [
            { ID: "001", Name: "Input 1", Text: "Err1" },
            { ID: "002", Name: "Input 2", Text: "Err2" },
            { ID: "003", Name: "Input 3", Text: "Err3" },
            { ID: "004", Name: "Input 4", Text: "Err4" }
        ];

        var outputFieldTable = [
            { ID: "101", Name: "Output 1", Text: "Integer" },
            { ID: "102", Name: "Output 2", Text: "Integer" },
            { ID: "103", Name: "Output 3", Text: "Integer" },
            { ID: "104", Name: "Output 4", Text: "String" },
            { ID: "105", Name: "Output 5", Text: "String" },
            { ID: "106", Name: "Output 6", Text: "Double" }
        ];
        myDiagram =
            $(go.Diagram, "myDiagramDiv",
                {
                    initialContentAlignment: go.Spot.Center,
                    "undoManager.isEnabled": true,
                    allowMove: false,
                    allowDelete: true,
                    allowCopy: false,
                    allowDragOut: false,
                    allowDrop: false
                });

        myDiagram.nodeTemplate =
            $(go.Node, "Vertical",
                {
                    selectionObjectName: "SCROLLING",
                    resizable: false, resizeObjectName: "SCROLLING",
                    portSpreading: go.Node.SpreadingNone
                },
                new go.Binding("location").makeTwoWay(),
                $(go.TextBlock,
                    { font: "bold 14px sans-serif" },
                    new go.Binding("text", "key")),
                $(go.Panel, "Auto",
                    $(go.Shape, { fill: "white" }),
                    $("ScrollingTable",
                        { stretch: go.GraphObject.Fill },
                        new go.Binding("TABLE.itemArray", "items"),
                        new go.Binding("TABLE.column", "left", function (left) { return left ? 2 : 0; }),
                        new go.Binding("desiredSize", "size").makeTwoWay(),
                        {
                            name: "SCROLLING",
                            desiredSize: new go.Size(100, 100),
                            "TABLE.itemTemplate":
                            $(go.Panel, "TableRow",
                                {
                                    defaultStretch: go.GraphObject.Horizontal,
                                    fromSpot: go.Spot.LeftRightSides,
                                    toSpot: go.Spot.LeftRightSides,
                                    fromLinkable: true,
                                    toLinkable: true,
                                },
                                new go.Binding("portId", "Name"),
                                $(go.TextBlock, { column: 1 }, new go.Binding("text", "Name")),
                                $(go.TextBlock, { column: 2 }, new go.Binding("text", "Text"), { editable: true })
                            ),
                            "TABLE.defaultColumnSeparatorStroke": "gray",
                            "TABLE.defaultColumnSeparatorStrokeWidth": 0.5,
                            "TABLE.defaultRowSeparatorStroke": "gray",
                            "TABLE.defaultRowSeparatorStrokeWidth": 0.5,
                            "TABLE.defaultSeparatorPadding": new go.Margin(1, 3, 0, 3)
                        }
                    )
                )
            );

        myDiagram.model = $(go.GraphLinksModel,
            {
                linkFromPortIdProperty: "fromPort",
                linkToPortIdProperty: "toPort",
                nodeDataArray: [
                    {
                        key: "Input", left: true, location: new go.Point(0, 0), size: new go.Size(170, 100),
                        items: inputFieldTable
                    },
                    {
                        key: "Output", location: new go.Point(300, 0), size: new go.Size(170, 100),
                        items: outputFieldTable, editable: true
                    }
                ]
            });

        //Function to handle editing of Scrolling Tables row data
        myDiagram.addDiagramListener("TextEdited",
            function (e) {
               // alert("Text is changed.");
                var part = e.subject.part;                  
                if (part.data.key.toUpperCase() == "INPUT") {
                    myDiagram.rollbackTransaction();
                    return false;
                }
                else if (part.data.key.toUpperCase() == "OUTPUT") {
                    if ((part instanceof go.Node)) {
                        //NEED TO KNOW THE ENTIRE ROW DATA HERE
                    }
                }

            });
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-20 17:16:36

您是在询问如何从"TextEdited“侦听器中获取项数据吗?

  • e.subject将被编辑为TextBlock
  • Panel.itemTemplate.中的e.subject.panel将包含面板,这是一个"TableRow“。
  • e.subject.panel.data将是项数据--即该行的数据。

这适用于所有带有itemArrays的面板--而不仅仅是在"ScrollingTable“中。

对于一个TextBlock.editable TextBlock来说,没有一个TwoWay 绑定是有点奇怪的,但是它可以根据您在"TextEdited“侦听器中所做的事情而定。

票数 1
EN

Stack Overflow用户

发布于 2017-07-20 15:16:46

您必须从模型中获取所有的值,方法是调用以下命令

代码语言:javascript
代码运行次数:0
运行
复制
myDiagram.model.nodeDataArray

然后,您需要遍历这些对象,以确定哪些值发生了更改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45217204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档