Javascript Office内容控制列表不准确

Javascript Office内容控制列表不准确,javascript,office-addins,Javascript,Office Addins,我可以用几种方法来实现这一点,但是让我们坚持使用AddIn本身。如果创建ContentControl: Word.run((context) => { let control = context.document.getSelection().insertContentControl(); control.tag = 'example'; control.insertOoxml('<xml here>'); context.sync(); });

我可以用几种方法来实现这一点,但是让我们坚持使用AddIn本身。如果创建ContentControl:

Word.run((context) => {
    let control = context.document.getSelection().insertContentControl();
    control.tag = 'example';
    control.insertOoxml('<xml here>');
    context.sync();
});
Word.run((上下文)=>{
let control=context.document.getSelection().insertContentControl();
control.tag='example';
对照组:InsertoxML(“”);
context.sync();
});
然后(当然是正确的异步处理)我删除了该控件:

Word.run((context) => {
    let contentControls = context.document.contentControls;
    context.load(contentControls, 'tag');
    context.sync().then(() => {
        for (let c = 0; c < contentControls.items.length; ++c) {
            if (contentControls.items[c].tag === 'example') {
                contentControls.items[c].delete(false); // delete the contentControl with the matching tag
            }
        }
        context.sync()
    });
});
Word.run((上下文)=>{
让contentControls=context.document.contentControls;
load(contentControls,'tag');
context.sync()。然后(()=>{
for(设c=0;c
然后我检查刚刚删除的控件的内容控件列表:

Word.run((context) => {
    let contentControls = context.document.contentControls;
    context.load(contentControls, 'tag');
    context.sync().then(() => {
        for (var i = 0; i < contentControls.items.length; ++i) {
            if (contentControls.items[c].tag === 'example') {
                // this tag list still includes the deleted content control until I close and reopen the document
            }
        }
    });
});
Word.run((上下文)=>{
让contentControls=context.document.contentControls;
load(contentControls,'tag');
context.sync()。然后(()=>{
对于(变量i=0;i
标记仍然显示已删除的内容控件。我必须关闭并重新打开文档,以便刷新上下文。是否缺少与文档当前状态正确同步的步骤?
context.sync()
还不够吗

注意:
delete()
确实有效:内容将按预期从文档中消失。当我搜索文档时,它仍然在控件列表中


进一步的研究已经确定了原因

启用TrackChanges时,文档中的ContentControls实际上不会被删除。这仍然感觉像是一个单词bug,但您可以检查contentcontrol上的deleted标志(不确定这是否真的可能,因为它可能位于祖先的某个任意级别),手动管理您的删除(正如我们正在做的),或者关闭跟踪更改以解决此问题


综上所述,我将把这个问题留作一个问题,以防有人有更好的结果。

在同步上下文后尝试检查列表-在
中。然后
回调:

Word.run((context) => {
    let contentControls = context.document.contentControls;
    context.load(contentControls, 'tag');
    context.sync().then(() => {
        for (let c = 0; c < contentControls.items.length; ++c) {
            if (contentControls.items[c].tag === 'example') {
                contentControls.items[c].delete(false); // delete the contentControl with the matching tag
            }
        }
        context.sync().then(()=> {
            //your updated list
        })
    });
});
Word.run((上下文)=>{
让contentControls=context.document.contentControls;
load(contentControls,'tag');
context.sync()。然后(()=>{
for(设c=0;c{
//你的最新名单
})
});
});

我就是这么做的。在这种情况下,我试图在稍后的一次呼叫中从头开始加载contentControls,而被删除的一个仍然在列表中(尽管正在同步)。好吧,也没有悬赏回答,我只需要使用临时解决方法:手动跟踪被删除的内容控件