Búsqueda de sitios web

Cómo implementar los eventos OnEnter y OnExit en ContentControl usando la API de Javascript para Word 2016


Hay muchos controles de contenido en un documento y necesito encontrar una manera de saber en qué control de contenido está el cursor para poder seleccionar ese control y realizar la operación correspondiente. Creo que implementando los eventos onEnter y onExit para los controles de contenido, puedo lograrlo. Pero no sé cómo declarar e invocar esos manejadores de eventos en la API de JavaScript. Cualquier ayuda es realmente apreciada.

Respuesta #1

Necesitarías usar una combinación de APIs para implementar esa funcionalidad con el conjunto actual de APIs:

  1. Primero agregue un controlador de eventos para el evento Document.selectionChanged.
  2. Cada vez que se active el evento, obtén el objeto Range correspondiente a la selección en el documento, usando la API Document.getSelection().
  3. Verifica el rango para ver si hay un control de contenido en él, usando la relación Range.contentControls.

-Michael (PM de complementos)

Respuesta #2

¡Buena pregunta! Tenemos un evento onEnter para los controles de contenido (lo llamamos binding.selectionChanged). También tenemos un evento binding.dataChanged que se activa si el usuario cambia el contenido y sale del control de contenido.

Así que una solución alternativa a lo que Michael propuso es crear enlaces para cada control de contenido en el documento y luego registrarse para tales eventos.

puedes lograr esto mediante: 1. recorriendo la colección de controles de contenido (usa la colección body.contentControls). 2. para cada control de contenido, toma o establece el título y úsalo para crear un enlace mediante un elemento con nombre. revisa el método bindings.addFromNamedItem. 3. en la llamada de retorno, asegúrate de suscribirte a selectionChanged (o DataChanged) para el enlace. el código para crear el enlace y registrarse a los eventos se verá así:

function CreateCCSelectionChangedEvent() {
        Office.context.document.bindings.addFromNamedItemAsync("TitleOfTheContentControl", { id: 'Binding01' }, function (result) {
            if (result.status == 'succeeded') {
                result.value.addHandlerAsync(Office.EventType.BindingSelectionChanged, handler);
            }
        });
       
    }

    function handler() {
       console.log("Event Triggered!");
    }

¡Espero que esto ayude!