2015-08-14 13 views
5

Tôi có thể sử dụng phương thức attr để thay đổi các thuộc tính của ô, ví dụ: để đặt đột quỵ của liên kết:Làm cách nào để thêm một lớp vào ô JointJS?

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

Nhưng tôi muốn đặt các thuộc tính như vậy trong tệp css, ví dụ: như trong số này

.connection { 
    stroke: #999; 
} 

.connection.error { 
    stroke: #F00; 
} 

Có cách nào để thêm các lớp như vậy vào SVG được tạo không?

tôi đã cố gắng

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

nhưng mà loại bỏ các lớp .connection, đó là quan trọng. Nó hoạt động để viết

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

nhưng rõ ràng rằng sẽ không mở rộng để có nhiều lớp học trực giao (error, highlighted ...)

+0

Bạn đã thử [Vectorizer> addClass (className)] (http://jointjs.com/api#v:addClass)? – xmojmr

+0

Không. Tôi đã ấn tượng rằng 'Vectorizer' sẽ hoạt động trên các đối tượng DOM, được sở hữu bởi khung nhìn (' ElementView'), trong khi ở trên ảnh hưởng đến đối tượng mô hình ('Element'). –

+0

Bạn có thể cung cấp JSFiddle không? – xmojmr

Trả lời

2

Trong một trong những official demos Tôi tìm thấy mã này:

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

Tôi phải nói rằng điều này có vẻ giống như một sự vi phạm của việc tách mô hình cho tôi để tương tác trực tiếp với quan điểm theo cách này, nhưng nếu được sử dụng trong mã chính thức thì tôi kết luận đây là cách thành ngữ nhất.

+0

Cảm ơn bạn đã tìm thấy viên ngọc ẩn này. jQuery cũng có thể được sử dụng: '$ (paper.findViewByModel (model) .el) .toggleClass ('live')'. Tôi biết nó có vẻ sai, nhưng nó đặc biệt hữu ích để liên kết _data_ hoặc các công cụ khác với nó (không có chức năng 'dữ liệu' trong Vectorizer). Nếu chúng ta sử dụng tham chiếu jQuery $ __, nó trở nên đơn giản hơn: 'paper.findViewByModel (model). $ El.data ('liveID', 14214)'. – CPHPython

Các vấn đề liên quan