Ms office 如何将一个处理程序绑定到Word中的多个ContentControl(标题相同)?在Office中使用Javascript API

Ms office 如何将一个处理程序绑定到Word中的多个ContentControl(标题相同)?在Office中使用Javascript API,ms-office,contentcontrol,office-js,officedev,javascript-api-for-office,Ms Office,Contentcontrol,Office Js,Officedev,Javascript Api For Office,我正在使用用于Office的JavaScript API、MS Word 2016、VisualStudio 2015进行开发。文档中有多个标题相同的富文本ContentControl。我正在尝试将这些ContentControls绑定到处理程序,以便获得onBindingDataChanged通知 有没有办法将ContentControls绑定到一个具有自己ID的处理程序?还是将ContentControls的id作为一个参数传递 我当前的代码如下: function bindNamedIte

我正在使用用于Office的JavaScript API、MS Word 2016、VisualStudio 2015进行开发。文档中有多个标题相同的富文本ContentControl。我正在尝试将这些ContentControls绑定到处理程序,以便获得onBindingDataChanged通知

有没有办法将ContentControls绑定到一个具有自己ID的处理程序?还是将ContentControls的id作为一个参数传递

我当前的代码如下:

function bindNamedItem() {

    Office.context.document.bindings.addFromNamedItemAsync("CCTitle", Office.BindingType.Text, { id: 'ccbind' }, function (result) {
        if (result.status == 'succeeded') {
            console.log('Added new binding with type: ' + result.value.type + ' and id: ' + result.value.id);
        }
        else
            console.log('Error: ' + result.error.message);
    });

}
 function addEventHandlerToBinding() {
    Office.select("bindings#ccbind").addHandlerAsync(Office.EventType.BindingDataChanged, onBindingDataChanged);
}

 var onBindingDataChanged = function (result) {
        console.log(result);     
    }
由于文档中有多个标题为“CCTitle”的ContentControl,函数
bindNamedItem
中的
addFromNamedItemAsync
将给出错误:
找到了多个同名对象。


我试图实现的是,每当用户对ContentControls中的任何一个进行更改时,都可以获取ContentControls的id和内容。有什么办法可以帮忙吗?提前感谢。

正如您所发现的,内容控件的命名阻止您基于名称进行绑定。但是,有一个变通方法,可用于绑定到每个内容控件:

  • 首先检索.contentControls,它返回文档中所有内容控件的数组,称为
  • 数组中的每个元素都是一个数组。对每个ContentControl按顺序执行步骤3-6:
  • 使用ContentControl.title检查ContentControl的名称。如果它与您要查找的名称(CCTitle)匹配,则继续执行以下步骤。否则,从步骤3开始返回下一个ContentControl
  • 使用默认参数调用ContentControl以使word选择它
  • 在回调中收到已选择ContentControl的确认后,使用文本bindingType调用
  • 在回调中收到成功创建的确认后,使用BindingDataChanged调用。如果愿意,Use可以对所有这些绑定使用相同的处理程序函数
  • 这种解决方法的缺点之一是存在许多链式异步调用,因此性能可能不如您所希望的那么快。因此,我建议将此操作与某些用户操作绑定,并/或在任务窗格中添加加载UI,以避免混淆用户

    -Michael(办公室加载项的PM)