2009-04-16 38 views
13

Có ai đã mở rộng một plugin jQuery hiện có không?Mở rộng một plugin jQuery

Tôi không chắc nên bắt đầu từ đâu. Tôi không muốn sao chép và sửa đổi plugin mà tôi muốn mở rộng. Tôi có làm điều này thông qua mẫu thử nghiệm hay chỉ là một cuộc gọi mở rộng trên plugin được đề cập?

Hoặc tôi có mơ rằng việc làm điều này có ý nghĩa không?

Trả lời

10

EDIT: Như đã chỉ ra bởi Seb, đây không phải là đúng một ví dụ về 'mở rộng' một plugin, thêm 'đóng gói' một plugin, để mất nó vì nó đi kèm :)

Dưới đây là một cái gì đó tôi đã làm để đơn giản hóa việc sử dụng số điện thoại jquery autocomplete plugin của tôi cách đây một thời gian:

// small autocomplete plugin wrapping the full autocomplete plugin for a standard look and feel 
(function($) { 
    $.fn.standardAutocomplete = function(type) { 
     return this.autocomplete(ToAbsoluteUrl("~/System/Autocomplete/" + type), { 
      formatItem: formatItem, 
      formatResult: formatResult 
     }); 
     // Autocomplete formatting callbacks 
     function formatItem(row) { return row[0] + "<span class=\"sub\">" + row[1] + "</span>"; } 
     function formatResult(row) { return row[0].replace(/(<.+?>)/gi, ''); } 
    } 
})(jQuery); 

Hiện tại không thực hiện theo "thực hành mã hóa jquery" - ví dụ: Tôi không tính toán thực tế có thể có nhiều yếu tố được chọn, nhưng trong trường hợp này, tôi biết tôi sẽ không bao giờ chọn nhiều hơn một phần tử trên một trang với điều này vì vậy tôi muốn đơn giản và nó "hoạt động cho tôi". Bạn có thể sử dụng một cách tiếp cận tương tự, có lẽ với một chút tinh tế hơn.

+0

Thực ra, tôi đã xem xét phương pháp đó, vì nó cảm thấy ít bẩn hơn việc sao chép và dán. Bạn sẽ tha thứ cho tôi nếu tôi đưa ra câu trả lời 'bởi cuốn sách' một lúc trước khi đánh dấu câu trả lời của bạn là câu trả lời? :) –

+0

Tất nhiên, không có vấn đề gì :) –

+6

Đây là trình bao bọc, nó không mở rộng bất kỳ lớp hay đối tượng nào. Bạn đang thực tế tạo một plugin mới _uses_ khác, nhưng không có bất kỳ phương pháp nào khác của plugin cũng như các tùy chọn - trong trường hợp đó, bạn đang mở rộng bất kỳ thứ gì. – Seb

2

Nếu plugin được thực hiện tốt, khi đó bạn không có nhiều lựa chọn thay thế ngoài việc sử dụng số options để thay đổi hành vi của plugin.

Mục đích của việc này là tất cả mã của nó được đóng gói và không can thiệp vào mã khác, vì vậy bạn không thể tiêm bất kỳ mã nào trong đó.

Nếu bạn thực sự cần thay đổi hành vi của nó, thì tôi đoán bạn sẽ cần phải sao chép & dán mã.

+1

Trong di sản điển hình, bạn không phải tiêm mã, nhưng mở rộng đối tượng, tạo đối tượng mới. Chúng ta không thể sử dụng thừa kế bình thường trong trường hợp này? Tôi không tìm cách sửa đổi một phương thức hiện có, nhưng để thêm phương thức và tương tự. –

+0

Xem nhận xét của tôi trong câu trả lời của Steve để biết ý kiến ​​của tôi. Tóm lại, tôi nghĩ rằng bạn sẽ không thể mở rộng, nhưng _WRAP_, đó là một cái gì đó hoàn toàn khác với những gì bạn yêu cầu. – Seb

+0

Tôi hiểu đó là một trình bao bọc, đó là lý do tại sao nó là lựa chọn * thứ hai * của tôi khi so sánh với thừa kế thực sự. –

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