Hur man implementerar OnEnter- och OnExit-händelse på ContentControl med JavaScript API för Word 2016


Det finns många innehållskontroller i ett dokument och jag behöver ta reda på ett sätt att se vilken innehållskontroll markören befinner sig i så att jag kan välja den kontrollen och utföra operationen därefter. Jag tror att genom att implementera onEnter och onExit-händelser för innehållskontroller, kan jag uppnå detta. Men jag vet inte hur man deklarerar och anropar dessa händelsehanterare i JavaScript API. All hjälp uppskattas verkligen.

Svar #1

Du skulle behöva använda en kombination av API:er för att implementera den funktionen med den nuvarande uppsättningen av API:er:

  1. Lägg först till en händelsehanterare för Document.selectionChanged-händelsen.
  2. Varje gång händelsen utlöses, hämta Range-objektet som motsvarar markeringen i dokumentet, med hjälp av Document.getSelection() API.
  3. Kontrollera intervallet för att se om det finns en innehållskontroll i det, med hjälp av relationen Range.contentControls.

-Michael (PM för tillägg)

Svar #2

Bra fråga! Vi har ett onEnter-evenemang för innehållskontroller (vi kallar det binding.selectionChanged). Vi har också ett binding.dataChanged-evenemang som utlöses om användaren ändrar innehållet och lämnar innehållskontrollen.

så en alternativ lösning till det Michael föreslog är att skapa bindningar för varje innehållskontroll i dokumentet och sedan registrera sig för sådana händelser.

du kan uppnå detta genom att: 1. gå igenom samlingen av innehållskontroller (använd body.contentControls-samlingen) 2. för varje innehållskontroll, hämta eller ange titeln och använd den för att skapa en binding med ett namngivet objekt. kolla metoden bindings.addFromNamedItem 3. i callBacken, se till att prenumerera på selectionChanged (eller DataChanged) för bindningen. koden för att skapa bindingen och registrera för händelserna kommer att se ut så här:

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!");
    }

Hoppas det här hjälper!