2011-10-31 28 views
5

Khi tôi gọi các phương thức jQuery như jQuery.ajax, tôi sử dụng $ .ajax. Resharper là chọn một cái gì đó từ mã jqGrid mà làm cho nó muốn tự động hoàn thành $ t bất cứ khi nào tôi gõ $. Nó làm cho jQuery mã hóa REALLY chậm - không ai biết làm thế nào tôi có thể vô hiệu hóa điều đó?

CẬP NHẬT

Tôi biết mình có thể hoàn toàn đình chỉ Resharper từ Tools -> Options -> Resharper -> General -> Đình chỉ, nhưng tôi thực sự chỉ muốn nó rời javscript tôi một mình; (

+0

Bạn có thể đưa vào văn bản câu hỏi của mình phiên bản Resharper, jQuery, jqGrid và jQuery UI nào bạn sử dụng không? – Oleg

+0

Tôi sử dụng ReSharper 6.0 (6.0.2202.688), jqGrid 4.2.0, jQuery UI 1.8.16 và jQuery 1.6.4 hoặc 1.7RC1 và không thể tạo lại vấn đề được mô tả. Chỉ '$' được biết và không có '$ t'. – Oleg

+0

Tôi nhận '$ e' thay vì' $ t'. Resharper chọn nó lên từ jquery.corners.js ... Resharper cũng chọn các phương thức jQuery khác từ các plugin jQuery thay vì jQuery thích hợp. Tôi muốn có thể cho Resharper biết ưu tiên cao nhất của jQuery.js, hoặc một cái gì đó tương tự. –

Trả lời

1

tôi cho rằng ở đâu đó rằng trong mã của bạn hoặc trong mã của jqGrid các toàn cầu biến $t được xác định. các quy tắc ứng jqGrid có nhiều nơi như

methodName: function (methodParameters) { 
    return this.each(function() { 
     var $t = this, ... 
     ... 
    }); 
} 

Vì vậy, có rất nhiều nơi mà địa phương biến $t được xác định. Bên trong các phương pháp khác, bạn sẽ thấy var t = this hoặc var ts = this hoặc var self = this v.v.

Vì vậy, tôi cho rằng, đó là nơi nào đó trong mã của jqGrid mà bạn sử dụng có cốc & lỗi dán: một sao chép mã từ chức năng có var $t = this được xác định trong phương pháp khác, nơi một sử dụng một tên biến để lưu this. Vì vậy, $t sẽ được hiểu là biến toàn cục.

Tôi khuyên bạn nên tìm định nghĩa của số $t trong mã của bạn. Chỉ cần nhấn F12 trên $t hoặc sử dụng khả năng Resharper khác để tìm vị trí số toàn cầu$t được xác định.

+1

Thay đổi phương pháp được đề xuất sẽ chữa trị triệu chứng, chứ không phải bệnh. Nếu tôi sửa '$ e' mà Resharper gợi ý, nó chỉ tìm một biến toàn cục khác bắt đầu với' $ 'từ bất kỳ số lượng các plugin jQuery khác được tham chiếu trong giải pháp của tôi. –

+0

@MattCasto: Tôi đã viết trong câu trả lời chỉ giả định của tôi vì tôi * không thể tái tạo vấn đề * trên phiên bản ReSharper 6 và jqGrid của tôi. Vì vậy, tôi không có biến '$ t' hoặc' $ e' toàn cục được định nghĩa ở đâu đó. Bạn có thể cung cấp bản trình diễn tái tạo sự cố của mình không? Bạn sử dụng phiên bản giao diện người dùng jqGrid, jQuery và jQuery nào? Bạn sử dụng plugin nào khác? Bạn có sử dụng 'jquery.jqGrid.src.js' hoặc' jquery.jqGrid.min.js' không? – Oleg

+0

Tôi đã có thể tái tạo hành vi tương tự, với biến '$ e', sử dụng các góc jQuery 0.3. Tôi nghĩ rằng bạn có thể nhận được hành vi như thế này chỉ bằng cách tạo một biến toàn cầu bắt đầu bằng ký hiệu đô la '$' trong bất kỳ tệp JS nào trong giải pháp và Resharper sẽ nhận nó. Tuy nhiên, tôi chưa tự mình thử nghiệm điều này. –

1

Khi thiếu giải pháp thực sự, công việc tốt hơn sẽ là xác định hàm $ trong tệp common.js trong giải pháp của bạn.

$ = $; 

này không khắc phục vấn đề với $t hoặc bất cứ phương pháp toàn cầu khác mà bạn nhìn thấy ($e trong trường hợp của tôi) nhưng nó phải đề nghị các $ từ file Common.js của bạn như là gợi ý hàng đầu.

Tôi thích công việc này nhiều hơn một chút so với sửa đổi tệp nguồn plugin jQuery vi phạm vì tôi không muốn phải áp dụng lại sửa đổi này mỗi khi tôi cập nhật plugin của mình. Ngoài ra, tôi không phải lo lắng về việc có thể phá vỡ bất cứ điều gì bằng cách thay đổi tên biến hoặc loại bỏ các biến toàn cầu.

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