2016-07-18 14 views
1

, Ich versuche, ein ERD-Tool erstellen JointJS verwenden und mochte einen benutzerdefinierten Link mit Markup so etwas wieJointJS Links: Benutzerdefinierte Markup? So

<path><rect><path> 

Die Idee zu schaffen, ist eine Raute in der Mitte der Verbindung zu haben, ich weiß, Ich kann dies mit einem Element und zwei Links tun, aber ich möchte in der Lage sein, einige benutzerdefinierte Markup in den Link zu haben. Kann das gemacht werden? Wenn das so ist, wie?

Antwort

0

Sie können Ihr eigenes Markup für Links haben, genau wie für andere Elemente. Der mitgelieferte Markup-Code Link ist jedoch ziemlich komplex, verglichen mit dem Beispiel einer Rect. In joint.js:

joint.dia.Link = joint.dia.Cell.extend({ 

// The default markup for links. 
markup: [ 
    '<path class="connection" stroke="black" d="M 0 0 0 0"/>', 
    '<path class="marker-source" fill="black" stroke="black" d="M 0 0 0 0"/>', 
    '<path class="marker-target" fill="black" stroke="black" d="M 0 0 0 0"/>', 
    '<path class="connection-wrap" d="M 0 0 0 0"/>', 
    '<g class="labels"/>', 
    '<g class="marker-vertices"/>', 
    '<g class="marker-arrowheads"/>', 
    '<g class="link-tools"/>' 
].join(''), 

Wie Sie sehen können, ist, im Gegensatz zu einem Rect ein Link wirklich aus mehreren Objekten. Und das ist nur für die Link; Es gibt auch Markup für labels, vertices, usw., und Sie müssen diese möglicherweise berücksichtigen, abhängig von Ihren Anforderungen.

In meinem Fall, ich füge ein Tooltip --- HTML <title> Element --- Elemente. Für eine Rect einfach ich hartcodiert:

markup: '<g class="rotatable"><g class="scalable"><rect/></g><text/><title/></g>' 

aber für Link s gewählt ich gehen:

initialize: function() 
{ 
    // called from Backbone constructor 
    // call base initialize() 
    joint.dia.Link.prototype.initialize.apply(this, arguments); 

    // link markup is so complex that we need to fetch its definition 
    var markup = (this.markup || this.get('markup')); 
    // append <title> to markup, so that it covers whole path 
    markup += '<title/>'; 
    this.set('markup', markup); 
} 

, dass Sie einen Start zumindest geben sollte.