2012-01-24 44 views
7

Tôi đang cố gắng sử dụng jquery để tải biểu đồ dojo. Tôi đang sử dụng mã này. Tuy nhiên trong lần nhấp thứ hai, trong nút đầu tiên tôi nhận được lỗi này. Điều tương tự cũng xảy ra nếu tôi nhấp vào nút đầu tiên, nhấp vào nút thứ hai và nhấp lại vào nút đầu tiên. Vấn đề này đang khiến tôi phát điên.this.domNode is null

demo here

enter image description here

<script type="text/javascript"> 
$(document).ready(function() { 
    $('.lista_').click(function() { 
     $.get('index1.php', function (data) { 
      dojo.addOnLoad(function() { 
       require(["dojo/_base/xhr", "dojo/parser", "dojo/dom"], function (xhr, parser, dom) { 
        var um = []; 
        dijit.registry.filter(function (w) { //problem here, maybe this code destroy something that should not be destroyed 
         if (dojo.indexOf(um)) { 
          w.destroyRecursive(); 
         } 
        }); 
        $('#paginas').html(data); 

        dojo.parser.parse(dojo.byId('paginas')); 

       }); 
      }); 
     }); 
    }); 
}); 
</script> 
+2

Cố gắng sử dụng tệp js được sử dụng trong gỡ lỗi và không phải là tệp được thu nhỏ. điều này là để gỡ lỗi dễ dàng hơn., – Farmor

+0

Chỉ cần tự hỏi tại sao bạn sử dụng hai khung công tác javascript? – SergeS

+0

tốt, nó không liên quan đến câu hỏi. Tôi chỉ sử dụng dojo để tạo biểu đồ. – Daniel

Trả lời

3

Dường như bạn đang cố gắng để loại bỏ các biểu đồ cũ trước khi chèn/phân tích cú pháp mới, nhưng tôi không nghĩ rằng đang xảy ra. Điều này có thể khiến Dojo chặn các lỗi khác nhau.

dijit.registry.filter(function (w) { //problem here, maybe this code destroy something that should not be destroyed 
    if (dojo.indexOf(um)) { 
     w.destroyRecursive(); 
    } 
}); 

Tôi không chắc bạn đang làm gì ở đây. Hàm filter sẽ trả về một mảng các tiện ích mà hàm gọi lại trả về true. Ngoài ra, dojo.indexOf được sử dụng để tìm kiếm một phần tử trong một mảng (tôi không chắc chắn về loại ma thuật đen mà bạn đang làm với nó ở đó: P).

Tôi nghĩ (nếu tôi đã hiểu ý định của bạn), bạn thay vì nên làm:

dijit.registry.findWidgets(dojo.byId("paginas")).forEach(function(w) { 
    w.destroy(); 
}); 

này sẽ phá hủy các widget (s) bên #paginas trước khi chèn và phân tích cú pháp HTML mới lấy.

Chỉnh sửa: Khi bạn nhấp vào nút thứ 2 và biểu đồ bị xóa, thẻ <style> cũng sẽ bị xóa. Đó là lý do tại sao bạn thấy hiện vật từ div công cụ, bởi vì nó không còn bị ẩn bởi CSS nữa. Bạn có thể giải quyết điều này bằng cách nhập khẩu claro.css trong file chính, ví dụ: đặt này:

<style type="text/css"> 
@import "http://ajax.googleapis.com/ajax/libs/dojo/1.7/dijit/themes/claro/claro.css"; 
</style> 

trong phần đầu tập tin chính thay vì trong HTML bạn nạp với jquery (index1.php).

+0

cảm ơn câu trả lời của bạn. Liên kết hiện được cập nhật với đề xuất của bạn. Nhưng có một vấn đề khi chúng ta nhấp vào nút thứ hai, sau lần đầu tiên. Bạn cần kích hoạt chú giải công cụ để tái tạo sự cố. Một số div không bị xóa. – Daniel

+0

@Daniel Hmm, tôi không thấy lỗi trên trang được cập nhật. Bạn nói đúng rằng các chú giải công cụ không bị loại bỏ, nhưng tôi không chắc chúng là một vấn đề bởi vì chúng không có một id rõ ràng (và chú giải công cụ là một loại đơn). – Frode

+0

Hiện không có lỗi. Vấn đề duy nhất là công cụ của chú giải công cụ không bị xóa. Và nếu tôi phá hủy bởi cơ thể hoặc một cái gì đó tôi sẽ nhận được lỗi ban đầu this.domNode là null – Daniel

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