2010-05-24 18 views
6

Tôi đã viết một tiện ích jquery-ui bằng cách sử dụng Nhà máy Widget ...Xác định xem một phần tử có phải là một Widget jQueryUI

Tôi cần phải xác định được mã cho dù phần tử đã là tiện ích hay chưa.

My investmentGrid widget.

được tạo ra trên #container với

$('#container').investmentGrid() 

tôi cần để có thể xác định những nơi khác trong mã nếu $ ('# container') đã là một investmentGrid

Trả lời

6

Bạn có thể truy vấn chức năng của phần tử jQuery.data(), như vậy:

if ($('#container').data('investmentGrid')) { 
    ... 
} 
1

@Boycs: Theo hiểu biết của tôi, việc sử dụng Nhà máy Widget bảo vệ bạn khỏi việc khởi tạo một plugin nhiều lần trên cùng một phần tử. (Ref: http://jqueryui.pbworks.com/widget-factory)

Ngoài ra nếu bạn muốn xác nhận nếu "container" đã là một mạng lưới đầu tư bạn có thể thử các tùy chọn sau đây từ bên trong mã plugin của bạn:

this.element.data (" investmentGrid ") === điều này;

Để biết thêm chi tiết bạn có thể tham khảo docs.jquery.com/UI_Developer_Guide

+0

Cảm ơn ... Tôi có thể không rõ ràng trong câu hỏi ban đầu của mình ...Tôi cần để có thể xác định từ bên ngoài mã plugin của tôi có hay không $ ('# container') đã là một đầu tưGrid hay không ... – Boycs

+0

Bạn có thể chia sẻ với tôi tại sao bạn cần phải xác định liệu "vùng chứa" đã đầu tưGrid hay không? Nó sẽ giúp tôi trả lời chính xác hơn. Cảm ơn –

5

Bạn có thể thử chọn giả đó là được tạo cho bạn khi sử dụng nhà máy tiện ích. $(":namespace-widgetname")

3

@ dan-story có thể đã có câu trả lời vào thời điểm anh ấy trả lời, nhưng tôi thấy rằng phương pháp đó không hoạt động nữa. Vâng, không hoàn toàn. Ít nhất không phải với jQueryUI 1.10. Theo tài liệu tại số http://api.jqueryui.com/jQuery.widget/ trong phần "Phiên bản", bây giờ bạn cần có tên đầy đủ của tiện ích.

Ví dụ, nếu bạn tạo nhà máy phụ tùng của bạn với điều này:

$.widget("Boycs.investmentGrid", ...); 

Sau đó, để kiểm tra xem hộp có nó, bạn sẽ kiểm tra với điều này:

if ($('#container').data('Boycs-investmentGrid')) 
{ 
    ... 
} 

Nó không đủ dài để chỉ sử dụng tên.

1

Phiên bản hiện tại của giao diện người dùng jQuery (Tôi có thể xác nhận nó với 1.11.x) cho phép bạn truy vấn phiên bản của tiện ích con thông qua phương thức instance(). thì điều này sẽ trông như thế này:

$('#container').investmentGrid('instance') 

Nếu phần tử không có phụ tùng investmentGrid giao, bạn sẽ nhận được undefined lại.

Bạn cũng có thể sử dụng gọi này để thay thế:

$(#container').is(':data("namespace-investmentGrid")') 

này có lợi thế, mà nó cũng hoạt động ngay cả khi các phụ tùng được không nạp.

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