/ / Determine si un elemento es un widget jQueryUI - jquery-ui, widget

Determine si un elemento es un widget jQueryUI - jquery-ui, widget

He escrito un widget de jquery-ui usando Widget Factory ...

Necesito poder determinar en el código si el elemento ya es un widget o no ...

Mi widget de investmentGrid se crea en el #container con

 $("#container").investmentGrid()

Necesito poder determinar en otra parte del código si $ ("# container") ya es un investmentGrid

Respuestas

6 para la respuesta № 1

Puedes consultar el elemento "s jQuery.data() función, como tal:

if ($("#container").data("investmentGrid")) {
...
}

5 para la respuesta № 2

Puede probar el pseudo selector que se crea para usted al usar la fábrica de widgets. $(":namespace-widgetname")


3 para la respuesta № 3

@ dan-story puede haber tenido la respuesta en el momento en querespondí, pero he descubierto que ese método ya no funciona. Bueno, no del todo. Al menos no con jQueryUI 1.10. Según la documentación en http://api.jqueryui.com/jQuery.widget/ en la sección "Instancia", ahora necesita tener el nombre completo del widget.

Por ejemplo, si crea su fábrica de widgets con esto:

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

Luego, para verificar si el contenedor lo tiene, verificas con esto:

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

Ya no es suficiente usar el nombre.


1 para la respuesta № 4

@Boycs: Según mi entendimiento, el uso de Widget Factory lo protege de crear instancias de un complemento varias veces en el mismo elemento. (árbitro: http://jqueryui.pbworks.com/widget-factory)

Además, si desea confirmar si "contenedor" ya es una cuadrícula de inversión, puede probar la siguiente opción dentro de su código de complemento:

this.element.data ("investmentGrid") === esto;

Para más detalles, puede consultar docs.jquery.com/UI_Developer_Guide


1 para la respuesta № 5

Las versiones actuales de jQuery UI (puedo confirmarlo con 1.11.x) le permiten consultar una instancia de un widget a través de instance() método. Esto se verá así:

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

Si el elemento no tiene un investmentGrid widget asignado, obtendrás undefined espalda.

También puedes usar call this en su lugar:

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

Esto tiene la ventaja de que también funciona incluso cuando el widget no está cargado.