2011-04-23 32 views
13

Tôi biết rằng tôi có thể tạo các plugin jQuery tùy chỉnh bằng cách sử dụng hàm tạo $.fn.myFunction và gọi hàm tùy chỉnh trong JavaScript là $('selector').myFunction().Tạo chức năng jQuery tùy chỉnh mà không cần chọn điều kiện tiên quyết

Tuy nhiên, đối với một dự án tôi hiện đang làm việc, tôi cần có khả năng xác định một hàm không yêu cầu bộ chọn để làm việc. Đây thực sự là một plugin MessageBox, sẽ hoạt động theo cách tương tự C# 's MessageBox lớp học. Như vậy, tôi sẽ lý tưởng thích để tạo ra các chức năng như MessageBox, và sau đó gọi nó như sau:

var myMessage = $.MessageBox(); và sau đó lần lượt myMessage.Show();

Thông báo việc thiếu giá treo đồ selector trong tài liệu tham khảo jQuery vào đầu của gọi hàm.

Bất kỳ lời khuyên nào về thực tiễn tốt nhất cho điều này sẽ được biết ơn.

Trả lời

14

này nên làm việc:

jQuery.MessageBox = function() { 
    var show = function() { 
    // something... 
    } 
    var hide = function() { 
    // something... 
    } 
    return { 
    show: show, 
    hide: hide 
    } 
} 
+1

là thực tiễn tốt này? – relipse

+0

@relipse: Bạn có thể làm rõ lý do tại sao bạn có nghi ngờ không? – Amadan

+3

Bởi vì tôi tự hỏi nếu làm rối tung không gian tên của jquery như thế là thực hành tốt, hoặc có một cách khác. Trong khi chờ đợi, tôi đã thực hiện hộp thoại của riêng mình mà không sử dụng một bộ chọn tương tự như mã của bạn ở trên. https://github.com/relipse/jquery-dialogPrompt Tôi biết YAHOO! thư viện có hàm YAHOO.namespace() đặc biệt để khai báo của riêng bạn. – relipse

5

relipse có một điểm tốt - như bạn đang làm lộn xộn không gian tên chính. Một giải pháp nếu bạn có nhiều đối tượng hơn là ví dụ. MessageBox là tạo ra không gian tên riêng của bạn như thế này:

jQuery.myLib = { 
    MessageBox: function() { 
    var show = function() { 
     // something... 
    } 
    var hide = function() { 
     // something... 
    } 
    return { 
     show: show, 
     hide: hide 
    } 
    } 
} 

Điều đó có nghĩa bạn chỉ lấy một chỗ trong không gian tên chính (tên của thư viện của bạn, trong trường hợp này myLib). Bạn muốn gọi nó là như thế này:

jQuery.myLib.MessageBox.show() 
1
(function ($) { 
    $.MessageBox = function() { 
     var show = function() { 
      // something... 
     } 
     var hide = function() { 
      // something... 
     } 
     return { 
      show: show, 
      hide: hide 
     } 
    } 
})(Jquery); 

Tôi nghĩ rằng bạn phạm vi tốt hơn để chức năng gọi ngay để tránh va chạm với không gian tên.

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