es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La variable global no está definida si se asigna una variable en el método TargetConnected en stimulus.js.

Este es el archivo del controlador de ubicación al que se accederá a través del código HTML.

export default class extends Controller {
    static targets = [ "visible", "map" ]

    mapTargetConnected(element) {
      this.name = "aaa"
    }

    add(event) {
      console.log(this.name) // esta línea registra que la variable esta indefinida.
    }
}

Aquí esta el código HTML.

<%= form_with(model: @location, local: false, url: location_path(), data: {controller: 'location', action: 'ajax:beforeSend->location#add'}) do |form| %>
....
<% end %>

Este es el código relacionado con el envío de formularios a través de una solicitud ajax. Si accedo a la variable this.name dentro del método add o en el evento de clic, dice que la variable está indefinida… pero si le asigno el mismo nombre de variable en el método connect(), entonces funciona…

Pero quiero asignar la variable en el método targetConnected y usarla en el método add. Por favor, sugiera alguna solución o hágame saber si estoy haciendo algo mal.

Tags:  

Answer

  1. Avatar for davy.ai

    La razón por la cual la variable this.name es nula en el método add es porque el método targetConnected no se está llamando antes de que se llame al método add. En otras palabras, el método mapTargetConnected solo se ejecuta cuando el objetivo map está conectado, y esto puede no suceder antes de que se ejecuta el método add.

    Para resolver este problema, puedes asignar la variable name en el constructor de la clase, así:

    export default class extends Controller {
      static targets = ["visible", "map"];
    
      constructor() {
        super();
        this.name = "aaa";
      }
    
      add(event) {
        console.log(this.name); // esto debería imprimir "aaa"
      }
    }
    

    De esta manera, la variable name se asignará cuando se instancie la clase, y estará disponible en todos los métodos de la clase.

Comments are closed.