2016-03-24 3 views
0
sap.ui.core.Element.extend("custom.barNlineChartControl", { metadata : { 
      properties : { 
       "Job" : {type : "string", group : "Misc", defaultValue : null}, 
       "Threshold" : {type : "int", group : "Misc", defaultValue : null}, 
      } 
     }}); 

sap.ui.core.Control.extend("control.barNlinechart", { 
     /* the control API */ 
     metadata : { 
      aggregations : { 
       "items" : { type: "custom.barNlineChartControl", multiple : true, singularName : "item"} 
      }, 
      events: { 
       "select" : {}, 
       "selectEnd": {}    
      }   
     }, 

    //D3 Code below: 
    onAfterRendering: function() { 
      var that = this; 
      /* get the Items aggregation of the control and put the data into an array */ 
      var aItems = this.getItems(); 

      var data = []; 
      for (var i=0;i<aItems.length;i++){ 
       var oEntry = {}; 
       for (var j in aItems[i].mProperties) { 
        oEntry[j]=aItems[i].mProperties[j]; 
       }     
       data.push(oEntry); 
      } 
      alert(JSON.stringify(data)); 

Code of view & SteuerCustom Control Openui5

multiBarLineGraph = new control.barNlinechart({ 
    layoutData: new sap.ui.layout.GridData({span: "L12 M12 S12"}), 
    items: { 
      path : "/genericData", 
      template : new custom.barNlineChartControl({Job:"{Job}",Threshold:"{Threshold}"}), 
      } 
    }), 

    var multiBarData = { 
        "genericData":[ 
            { 
              "Job": "Doctor", 
              "Threshold": 45, 
              "Hospital1": 30, 
              "Hospital2": 100, 
              "Hospital3": 90, 
             }, 
             { 
              "Job": "Teacher", 
              "Threshold": 65, 
             "School1": 60, 
              "School2": 75, 
             }, 
             ]}; 

Wenn der Alarm in d3 Code ausführt I Job & Threshold aber andere Daten von JSON-Array fehlen erhalten, die offensichtlich ist, wie die Eigenschaften hier nur eingestellt Job und Schwelle akzeptieren. Wie der JSON dynamisch ist, wie man ein benutzerdefiniertes Steuerelement schreibt, so dass ich die kompletten Daten zur Kontrolle jedes Mal weitergeben kann, egal wie dynamisch die Daten sind.

Antwort

2

könnten Sie Typ verwenden: „any“ für Ihre Artikel und nicht an allen das Element custom.barNlineChartControl verwenden:

Edit: als eine Aggregation die Lebensdauer der aggregierten Objekte Steuerelemente, die Sie haben eine Unterkunft in dieser verwenden Fall.

sap.ui.core.Control.extend("control.barNlinechart", { 
    /* the control API */ 
    metadata : { 
     properties : { 
      "items" : { type: "any" } 
     }, 
     events: { 
      "select" : {}, 
      "selectEnd": {}    
     }   
    }, 

und dann in der Ansicht:

multiBarLineGraph = new control.barNlinechart({ 
    layoutData: new sap.ui.layout.GridData({span: "L12 M12 S12"}), 
    items: { path : "/genericData" } 
}), 

this.getItems() würde eine Reihe von Leistungen zurück/Grenze gesetzt worden ist.

+0

Es gibt diesen Fehler Fehler: Fehlende Vorlage oder Factory-Funktion für Aggregation Elemente von Element control.barNlinechart #__ nlinechart0! ' – SiddP

+0

Ja, meine Schuld. Sie müssen eine Eigenschaft anstelle einer Aggregation verwenden. Meine Antwort wurde aktualisiert. – schnoedel

+0

Das hat funktioniert. Vielen Dank! – SiddP