Skip to content

self.inflate bidireccional #137

Open
@surtich

Description

@surtich

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:

  1. 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.

  2. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions