2015-08-14 1 views
5

Я могу использовать способ attr для изменения атрибутов ячейки, например. установить ход ссылки:Как добавить класс в ячейку JointJS?

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

Но я предпочел бы установить такие атрибуты в файле CSS, например, как в этом

.connection { 
    stroke: #999; 
} 

.connection.error { 
    stroke: #F00; 
} 

Есть ли способ добавить такие классы в сгенерированный SVG?

Я попытался

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

но удаляет .connection класс, который имеет важное значение. Он работает, чтобы написать

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

, но ясно, что не будет масштабироваться, чтобы иметь несколько ортогональных классов (error, highlighted ...)

+0

Вы попробовали [Vectorizer> addClass (className)] (http://jointjs.com/api#v:addClass)? – xmojmr

+0

Нет. У меня создалось впечатление, что 'Vectorizer' будет работать с объектами DOM, которые принадлежат представлению (' ElementView'), в то время как выше сказанное влияет на объект модели ('Element'). –

+0

Можете ли вы предоставить JSFiddle? – xmojmr

ответ

2

В одном из official demos я нахожу этот код:

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); 
} 

Должен сказать, что это похоже на нарушение разделения модели-представления на меня, чтобы напрямую взаимодействовать с представлением таким образом, но если это используется в официальном коде, я делаю вывод, что это самый идиоматический способ.

+0

Спасибо, что нашли этот скрытый драгоценный камень. Также можно использовать jQuery: '$ (paper.findViewByModel (model) .el) .toggleClass ('live')'. Я знаю, что это выглядит неправильно, но особенно полезно связывать _data_ или другие вещи с ним (без функции 'data' в Vectorizer). Если мы используем ссылку _ $ el_ jQuery, это становится еще проще: 'paper.findViewByModel (model). $ El.data ('liveID', 14214)'. – CPHPython