Problema con Jquery en el componente del plugin

¿jQuery está habilitado automáticamente para los componentes de los plugins? ¿Me estoy perdiendo algún paso de configuración?

Estoy teniendo problemas para acceder simplemente al DOM de HTML mediante jQuery (con el objetivo final de usar la función autocomplete de jQuery). Aquí hay un ejemplo de uno de mis intentos, tratando de obtener el ID de un elemento usando su identificador. Nunca encuentra el elemento. Es como si el JavaScript no tuviera un punto de referencia.

---- en /src/plugins/test/assets/javascripts/discourse/components ----
---- element-main.js.es6 ----
import discourseComputed, { observes } from "discourse-common/utils/decorators";
import jQuery from 'jquery';

export default Ember.Component.extend({
  init() {
    this._super(...arguments);
    console.log("en las plantillas/componentes/element-main.js.es6");
    console.log(jQuery);
    const aaa = jQuery('#eleinp');
    console.log(aaa)
    console.log(aaa.attr('id'));
  }
});

---- en /src/plugins/test/assets/javascripts/discourse/templates/components ----
---- element-main.hbs ----
<p>element-main en temp</p>
<input id="eleinp" value="HAHAHA">

También probé this.element, (this.element), (this), $(), etc.

1 me gusta

init es demasiado temprano en el ciclo de vida para aplicar jQuery. Además, no necesitas importarlo. Por último, debes evaluar si realmente necesitas usarlo desde el principio. Si necesitas usarlo, didInsertElement o didRender son los lugares correctos para hacerlo.

3 Me gusta

¡Gracias! didRender() funcionó bien, también eliminé la declaración de importación redundante. Estoy usando jQuery porque tengo una consulta de búsqueda personalizada en el input que no se ajusta bien al elemento HTML ‘datalist’. Esto se debe a que datalist solo muestra las opciones cuando contienen explícitamente una subcadena.

Trata de evitar jQuery, ya que se eliminará de Ember y, por lo tanto, de Discourse en los próximos dos años. JavaScript moderno nativo es suficiente.

6 Me gusta

Gracias por la advertencia, ahora estoy viendo Awesomplete en lugar del autocompletado de JQuery

2 Me gusta