Button for add Item in ItemsArray

dear sir,

i have this situation:
function convertVisibility(v) {
switch (v) {
case “public”: return “+”;
case “private”: return “-”;
case “protected”: return “#”;
case “package”: return “~”;
default: return v;
}
}

// the item template for methods
var methodTemplate =
  $(go.Panel, "Horizontal",
    // method visibility/access
    $(go.TextBlock,
      { isMultiline: false, editable: true, width: 12 },
      new go.Binding("text", "visibility", convertVisibility)),
    // method name, underlined if scope=="class" to indicate static method
    $(go.TextBlock,
      { isMultiline: false, editable: true },
      new go.Binding("text", "name").makeTwoWay(),
      new go.Binding("isUnderline", "scope", function(s) { return s[0] === 'c' })),
    // method parameters
    $(go.TextBlock, "()",
      // this does not permit adding/editing/removing of parameters via inplace edits
      new go.Binding("text", "parameters", function(parr) {
        var s = "(";
        for (var i = 0; i < parr.length; i++) {
          var param = parr[i];
          if (i > 0) s += ", ";
          s += param.name + ": " + param.type;
        }
        return s + ")";
      })),
    // method return type, if any
    $(go.TextBlock, "",
      new go.Binding("text", "type", function(t) { return (t ? ": " : ""); })),
    $(go.TextBlock,
      { isMultiline: false, editable: true },
      new go.Binding("text", "type").makeTwoWay())
  );



// this simple template does not have any buttons to permit adding or
// removing properties or methods, but it could!


myDiagram.nodeTemplateMap.add("Classe",
  $(go.Node, "Auto",
    $(go.Shape, "Rectangle",{ fill: "lightyellow" }),
    $(go.Panel, "Table",

      //linea che separa nome dai metodi
      $(go.RowColumnDefinition,{ row: 2, separatorStrokeWidth: 1.5, separatorStroke: "black" }),
        //PreHeader
      $(go.TextBlock,
        {
          row: 0, alignment: go.Spot.Center,
          font: "10pt sans-serif",
          isMultiline: false,
          editable: true
        },
        new go.Binding("text", "tipo").makeTwoWay()),

        //Nome della Classe
      $(go.TextBlock,
        {
          row: 1, alignment: go.Spot.Center,
          font: "bold 12pt sans-serif",
          isMultiline: false,
          editable: true
        },
        new go.Binding("text", "name").makeTwoWay()),

      //Scritta che viene mostrata quando il pannello è ridotto
      $(go.TextBlock, "Methods",
         { row: 2, font: "italic 10pt sans-serif" },
         new go.Binding("visible", "visible", function(v) { return !v; }).ofObject("METHODS")),
      // methods
      $(go.Panel, "Vertical", { name: "METHODS" },
        new go.Binding("itemArray", "methods"),
        {

          row: 2, margin: 3, stretch: go.GraphObject.Fill,
          defaultAlignment: go.Spot.Left, background: "lightyellow",
          itemTemplate: methodTemplate
        },
        new go.Binding("itemArray", "methods").makeTwoWay(),
        new go.Binding("itemArray", "methodsList").makeTwoWay()
      ),
      $("PanelExpanderButton", "METHODS",
        { row: 2, visible: false, column: 1, alignment: go.Spot.TopRight },
        new go.Binding("visible", "methods", function(arr) { return arr.length > 0; })
        ),
      $("Button",
        { row:3, click: addMetodo},
        $(go.TextBlock, "Aggiungi metodo"))
    )
  )
);

function addMetodo(??) {

}

i am not able to write the function addMetodo, because i have not idea to give the function the correct obj for add an items… can you help me?

I think what you want to do is covered by GoJS Item Arrays-- Northwoods Software. And you can search for examples that call Model.insertArrayItem or Model.addArrayItem.

Remember to execute all your changes within a transaction.