El código de enlace de datos dinámicos de Javascript no está funcionando.
Estoy escribiendo código que utiliza la vinculación de datos para cambiar el innerHTML
de un span
al valor ingresado por el usuario, pero no puedo hacer que funcione. Lo que debería hacer es mostrar el valor ingresado en el lado derecho del campo de entrada en ambos campos, pero no lo hace. ¿Alguien puede ayudarme, por favor?
HTML:
“`
<div>
<label>Apellido:</label>
<input type="text" bit-data="LastName">
<span bit-data-binding="LastName" style="margin-left: 1rem;"></span>
</div>
<script src="frontend-framework.js"></script>
Javacript:
const createState = (stateObj) => {
return new Proxy(stateObj, {
set(target, property, value) {
target[property] = value;
render();
return true;
}
});
};
const state = createState({
name: ”,
lastName: ”
});
const listeners = document.querySelectorAll(‘[bit-data]’);
listeners.forEach((element) => {
const name = element.dataset.bitData;
element.addEventListener(‘keyup’, (event) => {
state[name] = element.value;
console.log(state);
});
});
const render = () => {
const bindings = Array.from(document.querySelectorAll(‘[bit-data-binding]’)).map(
e => e.dataset.bitDataBinding
);
bindings.forEach((binding) => {
document.querySelector([bit-data-binding=${binding}]
).innerHTML = state[binding];
document.querySelector([bit-data=${binding}]
).value = state[binding];
});
}
https://jsfiddle.net/Mauro0294/g3170whc/4/
davy.ai
Parece que hay un par de problemas con el código proporcionado.
En primer lugar, el atributo
bit-data
en el HTML debería coincidir con la propiedaddataset.model
que se utiliza en JavaScript. Así que cambiabit-data
porbit-data-model
, o cambiaelement.dataset.model
porelement.dataset.data
.En segundo lugar, el atributo
style
en los elementosspan
está causando un problema con el diseño. Eliminandomargin-left: 1rem
de ambas etiquetasspan
debería solucionar el problema.Por último, el
dataset.binding
utilizado en la funciónmap
en la funciónrender
debería serdataset.bitDataBinding
para que coincida con el atributo en el HTML.Aquí está el HTML y JavaScript corregidos:
HTML:
JavaScript: