2015-08-14 14 views
5

Posso utilizzare il metodo attr per modificare gli attributi di una cella, ad es. per impostare il tratto di un collegamento:Come si aggiunge una classe a una cella JointJS?

conn.attr({'.connection': { stroke: 'red' }}); 

Ma preferirei impostare tali attributi nel file css, ad es. come in questo

.connection { 
    stroke: #999; 
} 

.connection.error { 
    stroke: #F00; 
} 

C'è un modo per aggiungere tali classi all'SVG generato?

ho cercato

conn.attr({'.connection': { class: 'error' }}); 

ma che rimuove la classe .connection, che è importante. Si lavora per scrivere

conn.attr({'.connection': { class: 'connection error' }}); 

ma chiaramente che non scala ad avere più classi ortogonali (error, highlighted ...)

+0

Hai provato [Vectorizer> addClass (className)] (http://jointjs.com/api#v:addClass)? – xmojmr

+0

No. Ho avuto l'impressione che 'Vectorizer' funzionerà sugli oggetti DOM, che sono di proprietà della vista (' ElementView'), mentre il precedente riguarda l'oggetto modello ('Elemento'). –

+0

Puoi fornire JSFiddle? – xmojmr

risposta

2

In uno dei official demos Trovo questo codice:

function toggleLive(model, signal) { 
    // add 'live' class to the element if there is a positive signal 
    V(paper.findViewByModel(model).el).toggleClass('live', signal > 0); 
} 

Devo dire che questo mi sembra piuttosto una violazione della separazione della vista modello da parte mia per interagire direttamente con la vista in questo modo, ma se viene usata nel codice ufficiale, concludo che questo è il modo più idiomatico.

+0

Grazie per aver trovato questa gemma nascosta. jQuery può anche essere usato: '$ (paper.findViewByModel (model) .el) .toggleClass ('live')'. So che sembra sbagliato ma è particolarmente utile associare _data_ o altre cose ad esso (nessuna funzione 'data' in Vectorizer). Se usiamo il riferimento _ $ el_ jQuery, diventa ancora più semplice: 'paper.findViewByModel (modello). $ El.data ('liveID', 14214)'. – CPHPython

Problemi correlati