2012-10-12 24 views
5

Tôi đã viết một plugin jQuery đơn giản, nhưng tôi muốn làm cho nó tiên tiến hơn để tôi có thể làm những việc như:

$.myplugin.close(); 
$.myplugin.open(); 
$.myplugin.next(); 
$.myplugin.prev(); 

Làm thế nào tôi có thể viết một plugin có thể được gọi như thế này?

------------------------- Cập nhật -------------------- -----

Cảm ơn @Craig MacGregor, đánh giá cao điều đó.

Nhưng để gọi hàm nó cần phải như dưới đây

$(this).myplugin.load(); 
+2

Đây là định dạng không tốt và không bao giờ nên b e được xây dựng như thế này. Tất cả các hàm nên được truy cập như các phương thức, như $ ('ele'). Myplugin ('close/open/next/prev'); – Ohgodwhy

+2

Vì vậy, nhiều upvotes ... lạ. – gdoron

+0

@Ohgodwhy nếu tôi cần thiết lập các tùy chọn của tôi để được chi tiết hơn sau đó tôi cần phải viết là '$ ('. Ele '). Myplugin ({action:' close ', xxx: xxx ......}) ; ' – user1740052

Trả lời

3

Bạn có thể gán một đối tượng để "myplugin" như vậy:

$.myplugin = { 
    close: function(){ 
     //code 
    }, 
    open: function(){ 
     //code 
    }, 
    next: function(){ 
     //code 
    }, 

    prev: function(){ 
     //code 
    } 
}; 
2

chỉ là ví dụ:

(funciton($) { 
    var methods = { 
    init: function() {}, 
    close: function() {}, 
    open: function() {}, 
    prev: function() {}, 
    next: function() {}, 
    }; 

    $.fn.myplugin = function (method) { 
    if (methods[method]) { 
     return methods[method].apply(this, [].slice.call(arguments, 1)); 
    } else if (typeof method == 'object' || !method) { 
     return methods.init.apply(this, arguments); 
    } else { 
     $.error('Method ' + method + ' does not exist on myplugin'); 
    }  
    }; 

}(jQuery)); 

//usage 
$(selector).myplugin(); 

// call methods 
$(selector).myplugin('close'); 
$(selector).myplugin('open'); 
$(selector).myplugin('next'); 
$(selector).myplugin('prev'); 
Các vấn đề liên quan