2017-05-16 29 views
0

In der mxGraph-Lernprogrammseite kann das benutzerdefinierte Benutzerobjekt mithilfe der graph.insertVertex() -Methode parametrisiert werden.mxGraph benutzerdefiniertes Benutzerobjekt mit xml untergeordneten Elementen lesen und schreiben

mxCell with custom user object value

Das benutzerdefinierte Objekt ist mit XML-Format von der Vorlage in dem wfeditor-commons.xml in den Workflow-Editor enthaltenen Beispielen definiert.

Aber was ist ein besserer Weg, um die Kinder Elemente über HTMLCollection zu bauen? Die folgende XML-Datei ist meine eigene definierte Vorlage. Ich muss das Child-Element Beschreibung und ActivityType beibehalten, wenn ein Wert geändert wurde.

<add as="task"> 
    <Activity label="Task" name="" code=""> 
    <Description/> 
    <ActivityType type="TaskNode"/> 
     <mxCell vertex="1"> 
      <mxGeometry as="geometry" width="72" height="32"/> 
     </mxCell> 
    </Activity> 
</add> 

Um die Kinder XML-Element Beschreibung und Activity Knoten durch diese Codes zuzugreifen:

var model = this.graph.getModel(); 
var snode = model.getSelectedCell(); //to get current selected cell 
var id = snode.id; 
var label = $(snode).attr("label"); //get xml node attribute 

var descriptionNode = $(snode.value).children("Description"); 
var descriptionTextContent = $(descriptionNode).text(); //get xml node text 
var activityTypeNode = $(snode.value).children("ActivityType"); 
var activityTypeAttr = $(activityTypeNode).attr("type"); //get xml node attribute 

Ich bin nicht sicher, ob dies eine effektive Methode ist die individuelle Benutzerobjekt lesen und schreiben durch HTMLCollection zu implementieren.

Übrigens, wenn die benutzerdefinierten Benutzerobjekt Kinderelemente geändert wurden, und müssen gespeichert werden. Wie legt man den Wert des Knotenattributs und des Textinhalts fest? Nachdem diese Werte geändert wurden, muss auch die Set-Value-Methode aufgerufen werden, um das Benutzerobjekt zu aktualisieren. Danke

Antwort

0

Am Anfang gibt es eine Konfusion über jQuery XML-Selektor und die MS XML-DOM-Objekt-Methode. Nach einigen Recherchen für MS XML DOM Wissen ist Thers eine nette Lösung zum Lesen und Schreiben von Benutzer-Objekten.

// Methode lesen

var model = kmain.mxGraphEditor.graph.getModel(); 
    var snode = model.getValue(cell); 

    var activity = {}; 
    activity.id = snode.getAttribute("id"); 
    activity.name = snode.getAttribute('label'); 
    activity.code = snode.getAttribute('code'); 

    var descriptionNode = snode.getElementsByTagName("Description")[0]; //child node 
    if (descriptionNode) activity.description = descriptionNode.textContent; 

    //activity type 
    var activityTypeNode = snode.getElementsByTagName("ActivityType")[0]; //child node 
    activity.type = activityTypeNode.getAttribute("type"); 

// write-Methode

var snode = model.getValue(kmain.mxSelectedDomElement.Cell); 

    snode.setAttribute('label', activity.name); //set attribute value 
    snode.setAttribute('code', activity.code); //set attribute value 

    var descriptionNode = snode.getElementsByTagName("Description")[0]; 
    if (!descriptionNode){ 
     descriptionNode = snode.appendChild(snode.ownerDocument.createElement('Description')); //add child element 
    } 
    descriptionNode.textContent = activity.description;   //set element text 

    var activityTypeNode = snode.getElementsByTagName("ActivityType")[0]; 
    activityTypeNode.setAttribute("complexType", activity.complexType); 

Diese machen es einfach individuelle Benutzerobjekt für mxGraph Benutzer zu halten.

Verwandte Themen