2017-07-20 14 views
0

我正在使用Gojs中的滾動表格。 我已經爲我的表設置了屬性「editable:true」。現在,假設我在一行的任何一列中編輯了一個文本,那麼如何獲取整行或編輯文本的數據呢? 如果你知道這一點,請讓我知道。如何在編輯Gojs中滾動表格中的任何文本時獲取行值?

這裏是我的代碼:

  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 
        } 
       } 

      }); 

回答

1

您是否問過如何從「TextEdited」偵聽器中獲取項目數據?

  • e.subject將是編輯TextBlock的
  • e.subject.panel將包含面板,這是您的Panel.itemTemplate中的「TableRow」。
  • e.subject.panel.data將是項目數據 - 即該行的數據。

這適用於所有使用itemArrays的面板 - 不僅僅是在「ScrollingTable」中。

這是一個有點奇怪的TextBlock.editable的TextBlock不是有一個雙向綁定,但它可以根據你在「TextEdited」聽衆做什麼即可。

+0

+1快速回復@Walter。實際上,我想要獲取正在編輯文本的行的數據,以便我可以找到唯一的鍵值,然後在此表的NodeDataArray中執行一些操作。 您的答案足以讓我檢索行數據。謝謝 –

0

你必須通過調用下面

myDiagram.model.nodeDataArray 

你然後需要通過對象迭代來從模型中的所有值確定哪些值已經改變。

+0

感謝您的回覆,但我知道這一點。實際上nodeDataArray包含整個數據。但是我想要編輯文本的特定行的數據。 –

相關問題