2012-06-08 29 views
5

tôi có mã như thế này, sử dụng jQuery-svgSự kiện tải trọng SVG được gọi là quá sớm?

function replaceRaster(){ 
    $('#png').remove() 
    a = $('#graphic') 
    b = a.svg(a) 
    a.load('IDC_Energy.svg', 
     {onLoad:bind}) 
    svg = document.getElementById("graphic").children[0] 
    console.log(svg) 
    svg.addEventListener('load', bind) 
} 

Các xử lý sự kiện, bind, bị sa thải trước khi jQuery-svg-dom có ​​thể chọn các yếu tố trong dữ liệu SVG. Mã của tôi có nghĩa vụ phải xem qua SVG và gán các lớp khác nhau và đính kèm các trình nghe vào các phần tử khác nhau, nhưng nó không thể tìm thấy bất kỳ phần tử nào. Nếu tôi gọi bind trong bảng điều khiển sau khi mọi thứ được tải, nó có thể tìm thấy alll các phần tử SVG.

Tôi có làm gì sai không? Có cách nào khác để phát hiện khi DOM SVG có sẵn không? Tôi đã nghĩ đến việc sử dụng một bộ đếm thời gian, nhưng đó là thực sự hacky, đặc biệt là xem xét các tập tin SVG của tôi có thể là một vài MB lớn.

Trả lời

0

Bạn đã thử sử dụng bộ hẹn giờ có độ trễ hẹn giờ là '0' hoặc có lẽ chỉ '10'? Tôi đã thường xuyên sử dụng kỹ thuật này để đẩy công việc ra khỏi vòng lặp chạy hiện tại khi bộ hẹn giờ được kích hoạt sau khi hoàn tất việc vẽ lại các ghas. Với may mắn, sự ràng buộc sẽ chỉ bị sa thải sau khi bản sao hoàn thành. Tôi không chắc liệu điều này có giúp ích gì trong trường hợp cụ thể của bạn hay không bởi vì tôi không biết bạn đang làm gì khác trong trang - ví dụ: nếu bạn có một số xử lý dữ liệu không đồng bộ đang diễn ra.

+1

Trang đang tải dữ liệu SVG không đồng bộ, có. Tôi đã kết thúc bằng cách sử dụng một vòng lặp để kiểm tra xem các nội dung đã sẵn sàng mỗi 50ms hoặc một cái gì đó (quên bây giờ). –

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