Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

126
Visualizações
mantener el alcance de la clase dentro de la función jquery extend

Estoy trabajando con una clase ListBox en Javascript y extendí una función jQuery para manejar el intercambio de elementos dentro de la lista.

Todo funciona como se esperaba cuando solo existe una instancia de ListBox. Sin embargo, tan pronto como se agregan más cuadros de lista, la extensión jQuery parece perder alcance en una variable de clase.

Básicamente, el DOM funciona como se esperaba (los elementos se intercambian visualmente), pero la función jQuery parece haber perdido el alcance de la matriz subyacente de la clase. Solo actualiza la matriz de la última instancia de ListBox

En el ejemplo del enlace jsFiddle, los elementos del segundo ListBox y la matriz se sincronizan adecuadamente hasta que se intercambia un elemento en el primer cuadro, luego todo comienza a perderse. También tenga en cuenta que la matriz de la primera instancia nunca cambia.

Puedo hacer que funcione usando 'esto' al declarar arItems, pero 'esto' no es aceptable porque no quiero exponer la matriz interna. Consideré usar una función de clase this.getList(), pero no creo que podamos hacer propiedades de solo lectura en javascript.

Lo que más me desconcierta es que los elementos jQuery parecen conocer muy bien el alcance... lo que significa que el intercambio en el primer cuadro no mueve los elementos en el segundo cuadro... y no habilita/deshabilita los botones de intercambio del 2da caja. Solo la matriz parece haber perdido alcance y se define con 'let', al igual que los elementos jQuery.

 const ListBox = function(){ let $lbContainer = $('<div id="lb-container"></div'); let $lb = $('<div id="lb-col1" class="list-group"></div>'); let arItems = [1,2,3,4]; ... ... // jQuery extension $.fn.lbMove = function(bUp){ let $item = (bUp ? this.prev() : this.next()); // swap array items arItems[this.index()] = arItems.splice($item.index(), 1, arItems[this.index()])[0]; // swap list items if(bUp) $item.before(this) else $item.after(this) // button enablement this.click(); } }

https://jsfiddle.net/kL2b37h6/2/

about 4 years ago · Juan Pablo Isaza
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda