2011-10-05 38 views
5

Tôi đang sử dụng richfaces 3_3_3Phải cách, và tôi không sử dụng jQuery http://code.jquery.com/jquery-latest.pack.js mới nhất, nhưng dường như có xung đột.Thay đổi phiên bản JQuery được sử dụng trong richfaces

Richfaces đã tải một phiên bản jQuery (phù thủy không phải là phiên bản phù hợp, có vẻ là 1.3.2):

<script type="text/javascript" src="/project/a4j/g/3_3_3.Finalorg/richfaces/renderkit/html/scripts/jquery/jquery.js.jsf"> 

Tôi có thể sử dụng phiên bản mới nhất cho quá trình Javascript của tôi, và cho phép sử dụng của nó RichFaces phiên bản riêng, và làm thế nào?

jQuery.noConflict() là một lĩnh vực nghiên cứu tốt?

+0

@Moin Zaman [Bài đăng này] (http://stackoverflow.com/questions/3881953/how-do-i-use-the-latest-version-of-jquery-and-get-back-the-for -jquery-in-rich) cho biết chúng ta có thể sử dụng nhiều phiên bản của jQuery cạnh nhau, nhưng không nói như thế nào. –

Trả lời

6

Có, jQuery.noConflict là một khởi đầu tốt, nhưng vì "thư viện khác" bạn đang sử dụng cũng là jQuery, có thể sẽ có biến chứng.

Khi bạn tải jQuery, nó định nghĩa $jQuery làm biến toàn cục. Sử dụng .noConflict sẽ "từ bỏ quyền kiểm soát biến số $" - nghĩa là bất cứ điều gì $ trước đó, nó sẽ được đặt lại. Nếu v1.3.2 được tải trước và bạn tải gói mới nhất (1.6.4 ngay bây giờ) tiếp theo, .noConflict sẽ làm cho $ tham chiếu đến v1.3.2 nhưng jQuery sẽ vẫn tham chiếu đến 1.6.4.

Về cơ bản, bạn cần đặt bí danh jQuery trước khi bạn tải gói mới nhất. See my fiddle used to simulate your situation (cũng được dán bên dưới).

<script type="text/javascript"> 
    //alias v.1.3.2 
    var $132 = $; 
</script> 
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.pack.js"></script> 
<script type="text/javascript"> 
    //alias v1.6.4 
    var $164 = $, jQuery164 = $; 

    //reset original variables to v1.3.2 
    $ = jQuery = $132; 

    console.log("v1.3.2: ", $().jquery, jQuery().jquery) 
    console.log("v1.6.4: ", $164().jquery, jQuery164().jquery) 

    $('div')  //selected using v1.3.2 
    $164('div') //selected using v1.6.4 
</script> 

Sau khi tải 1.6.4, bạn cần phải bí danh nó và thiết lập $jQuery trở lại 1.3.2 đối tượng. Điều này không sử dụng .noConflict bởi vì nó về cơ bản không giống nhau. RichFaces sẽ tiếp tục hoạt động bằng cách sử dụng 1.3.2 và bạn sẽ viết mã của mình dựa vào phiên bản 1.6.4 bí danh. Trong fiddle của tôi, điều đó có nghĩa là sử dụng $164 thay vì sử dụng $. Tôi hy vọng điều đó đúng. Tôi chắc chắn fiddle sẽ rõ ràng hơn.


Cuối cùng, bạn không nên sử dụng mã này bằng cách sử dụng jquery-latest.pack.js nhưng bạn không bao giờ nên sử dụng mã đó trên trang web sản xuất của mình. Lý do là vì tại một số thời điểm trong tương lai, jQuery sẽ được cập nhật. Nếu bạn đang tải gói mới nhất, các bản cập nhật đó có thể phá vỡ chức năng của trang web của bạn mà bạn thậm chí không biết. Sẽ an toàn hơn khi chỉ chọn một phiên bản và tuân theo nó, chỉ nâng cấp chỉ khi bạn xác nhận rằng trang web của bạn sẽ tiếp tục hoạt động đúng.

+0

Tôi hiểu câu trả lời nhưng tôi không thể triển khai giải pháp. Có một xung đột với Richfaces (không thể hiển thị các mở rộng) –

+0

Điều đó nghe có vẻ như nó là một vấn đề khác với bạn đã đề cập ban đầu - hoặc ít nhất tôi không thấy kết nối. Bạn bao gồm RichFaces và jQuery như thế nào? – Jeff

+0

Dự án của tôi đang sử dụng JSF1.2/Richfaces (với maven). Khi tôi thử nghiệm bao gồm một phiên bản khác của jQuery, tôi thêm '

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