Sitecore 8, MVC, Editor de experiencia: cómo hacer una actualización de representación después de que se haya utilizado un botón de editor de campo
sitecore-mvc sitecore8 (1)
Tenemos una representación que enumera los elementos seleccionados en un TreeSelect en el elemento actual. En nuestro caso los llamamos "Etiquetas" (1)
Hemos agregado un botón Editor de campo al componente para permitir que el editor cambie los elementos seleccionados. (2) (Como se describe en, por ejemplo, Agregar un componente personalizado )
Cuando un editor hace clic (2) en la ventana del editor (3), se abre en un cuadro de diálogo. El editor puede seleccionar diferentes elementos (llamados etiquetas en nuestro caso) usando el TreeSelect.
Cuando el editor presiona el botón ok (4), los valores se establecen.
Ahora al problema:
Los valores se establecen realmente a medida que se almacenan cuando el editor presiona el botón Guardar, pero queremos que nuestra lista en la página (1) refleje inmediatamente los elementos establecidos cuando el editor presiona el botón ok (4), es decir, antes de tener que realmente Guarda todo el artículo.
¿Cómo logramos eso?
(Estoy en contactos con el soporte de Sitecore, pero hasta ahora no he recibido ninguna respuesta ...)
Actualización Después de mucha conversación con el soporte, todavía no tenemos una solución útil.
Intentamos convertirlo en un renderizador de campo que muestre los enlaces. Lo que funcionó fue:
- El campo se actualiza cuando lo ha editado en el editor de campo emergente. (pero...)
- Se ve bien la primera vez que se carga la página.
- Puede crear un botón WebEdit con comandos para editar el campo y agregarlo como botón Personalizado al campo (registrar
<command name="webedit:fieldeditor" type="Sitecore.Shell.Applications.WebEdit.Commands.FieldEditor, Sitecore.Client"/>
y establezca Haga clic en el botón parawebedit:fieldeditor(command={3473DDA1-2983-493C-AF7A-054C75AA7AD3},fields=NameOfField
donde la guía apunta a sí mismo y se establece un" Icono ")
Lo que no funcionó fue:
- El campo se actualiza por el valor sin procesar, no lo que quiero mostrar. El código del servidor está involucrado, pero no en la representación del código html.
- Cuando quiero editar el valor en el editor de campo, el valor enviado al editor de campo no es el valor en bruto sino lo que realmente se muestra en la página. (Supongo que esto se puede resolver de alguna manera)
El problema para el soporte se convirtió en una solicitud de función para permitir que el servidor participe en la representación del campo, no solo enviando un nuevo valor al JavaScript que lo actualiza. El servidor realiza la primera representación, de modo que cuando ya está involucrado en la actualización, también se debe permitir que realice la representación las siguientes veces.
Hemos decidido no dedicar más tiempo a esto en este momento (también tenemos otras cosas que hacer) y tener una mala experiencia de editor ya que el campo no se actualiza hasta que el editor realmente guarda el elemento.
Todavía no tenemos una solución adecuada para este problema. Si desea seguir trabajando en ello y desea una referencia a mi problema, es 439059.
Esto puede no ser útil aquí. Lo he hecho en sitios normales, pero no en Sitecore. Pero, aquí hay una posibilidad ...
Esta es una situación en la que pasaría una función de devolución de llamada a la ventana emergente secundaria. Esta devolución de llamada hará que la ventana de la persona que llama / padre vuelva a leer / recargar la información que el niño acaba de actualizar.
Ejemplo: el usuario presiona (2) para abrir la ventana del editor (3) (la ventana del editor se abre y la función de devolución de llamada se pasa como parámetro) El usuario presiona el botón "OK" (4). El controlador de eventos del botón "Aceptar" actualiza los cambios, luego llama a la función de devolución de llamada que vuelve a cargar la información actualizada y cierra la ventana emergente. Una vez que la ventana emergente se cierra, la ventana principal ahora muestra la información que la ventana emergente / editor acaba de actualizar.
Esto requiere algo de desarrollo de javascript (jquery) del lado del cliente, pero normalmente es bastante factible.