Description
Creo que sería interesante que el método self.inflate tenga un comportamiento bidireccional.
Me explico:
La principal razón de la nueva implementación del método self.inflate es automatizar tareas sencillas y evitar hacerlas en el presenter. Con efecto beneficioso colateral, en muchos casos, se evitará tener que crear el data-id de los elementos del template.
Sin embargo, creo que podemos automatizar y simplificar todavía más si permitiéramos actualizaciones semi-automáticas desde el template hacia el presenter . Pongo un par de ejemplos:
-
Supongamos que quisiéramos recuperar el valor de varias cajas de texto. Con la solución actual, tendríamos que crear los data-ids en el template y recuperarlos con sel.get(xxx).val() en el presenter. Es decir, que la ventaja que habíamos conseguido con el método self.inflate sería limitada.
-
Lo mismo podríamos decir si quisiéramos saber si un componente esta oculto o no o si tiene determinada clase, etc.
Se me ocurren dos formas de implementarlo:
a) La primera sería que el método self.inflate pudiera recibir opcionalmente una función y que iris llamara a esta función pasándola un objeto con los valores de los atributos data-jq-xxx que tenga la vista antes de actualizarse.
b) La segunda sería crear el método self.deflate que devolvería un objeto con los valores de los atributos data-jq-xxx de la vista.
Es decir, que si en el template tenemos una caja de texto:
<input data-jq-val="person.name"></div>
E introducimos, por ejemplo Pepe.
El método self.deflate, devolvería el objeto:
{
"person": {
"name": "Pepe"
}
}
Me gusta mucho más la segunda opción por ser más clara de entender y de utilizar y porque desacopla operaciones (puedo hacer un inflate o un deflate a voluntad sin mezclar conceptos).
Con esto conseguiríamos, los bidirectionals-bindings de otras API MVC pero sin los problemas de rendimiento ni la introducción de lógica en la vista.