drupal 8 – ¿Qué diferencia hay entre la declaración de una función de devolución de llamada ajax con $ this y sin ella?

Pregunta:

Hay un formulario que funciona con AJAX Framework. Y hay un elemento de formulario que tiene la función de devolución de llamada llamada "myFunction", que es un método público de la clase de formulario. La devolución de llamada se puede declarar como

'callback' => [$this, 'myFunction']

Y también se puede declarar como

'callback' =>  '::myFunction'

¿Podría aclararme, qué diferencia funcional entre estas declaraciones?

Respuesta:

El método :: como cadena es una característica especial de la API de formularios.

Básicamente es una abreviatura de [$ this, 'método'] y hace casi exactamente lo mismo. Ver FormState :: prepareCallback

Hay una diferencia interesante, [$ this, 'método'] tiene que serializar todo el objeto del formulario dentro de la estructura del formulario, para luego anular la serialización para llamar a un método en él. Pero en ese punto, en una solicitud almacenada en caché, en realidad es un objeto diferente porque el sistema de formulario también creó un nuevo objeto de formulario, como parte de inicializarlo y comenzar a procesar la solicitud. :: El método realmente llamará al método en el nuevo objeto de formulario.

Siempre que sea posible, use la versión corta, a veces eso no es posible, por ejemplo, cuando está dentro de un complemento (por ejemplo, un widget de campo) u otra clase llamada por el formulario, en este caso, se recomienda usar un método estático.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım