问题描述
我将以下代码作为 Word 加载项的 javascript 的一部分:
function createCustomXmlPartAndStoreID() {
const xmlString = "<Reviewers xmlns='http://schemas.contoso.com/review/1.0'><Reviewer>Mark</Reviewer><Reviewer>Hong</Reviewer><Reviewer>Sally</Reviewer></Reviewers>";
Office.context.document.customXmlParts.addAsync(xmlString,(asyncResult) => {
Office.context.document.settings.set('ReviewersID',asyncResult.id);
console.log('SET: ' + asyncResult.id);
Office.context.document.settings.saveAsync(function (asyncResult) {
if (asyncResult.status == Office.AsyncResultStatus.Failed) {
console.log('Settings save Failed. Error: ' + asyncResult.error.message);
} else {
console.log('Settings saved.');
}
});
}
);
getReviewers();
}
function getReviewers() {
const reviewersXmlId = Office.context.document.settings.get('ReviewersID');
console.log('GOT: ' + reviewersXmlId);
Office.context.document.customXmlParts.getByIdAsync(reviewersXmlId,(asyncResult) => {
asyncResult.value.getXmlAsync(
(asyncResult) => {
$("#xml-blob").text(asyncResult.value);
}
);
}
);
它是由 Link
拼凑而成的在 Word 中运行加载项,在控制台中我收到以下消息:
得到:空
错误:函数 getByIdAsync 的参数无效。
设置:未定义
设置已保存。
因此,保存了 XML 设置(我可以在文档中看到它们)– itemXX.xml 具有:
<Reviewers xmlns="http://schemas.contoso.com/review/1.0"><Reviewer>Mark</Reviewer><Reviewer>Hong</Reviewer><Reviewer>Sally</Reviewer></Reviewers>
然而,我期望的有效 ReviewersID 实际上是未定义的,当它被设置时,然后当我尝试检索它时为 null,结果 getByIdAsync() 抛出错误。
知道我做错了什么吗?
编辑:我正在接近解决方案,但仍然存在一些问题:
function addXMLPartandHandler() {
Office.context.document.customXmlParts.addAsync(
"<testns:book xmlns:testns='http://testns.com'><testns:page number='1'>Hello</testns:page><testns:page number='2'>world!</testns:page></testns:book>",function(r) {
console.log('1 addAsyncID: ' + r.value.id);
Office.context.document.settings.set('WikindxID',r.value.id);
r.value.addHandlerAsync(Office.EventType.DatanodeDeleted,function(a) {
console.log(a.type);
console.log(a);
},function(s) {
console.log('2 ' + s.status);
});
});
Office.context.document.settings.saveAsync();
var wikindxXmlID = Office.context.document.settings.get('WikindxID');
console.log('3 WikindxID: ' + wikindxXmlID);
Office.context.document.bindings.getByIdAsync(wikindxXmlID,function (asyncResult) {
console.log('4 ' + asyncResult.status);
});
}
在控制台中,这会产生:
3 WikindxID: {4A32BF0A-A11D-7141-82DD-F4441E467099}
1 addAsyncID: {7F685839-E425-B145-9C32-ED0F3C58CD49}
4 Failed
2 succeeded
我希望 WikindxID 是来自 addSyncID 的值,但它总是落后于 1,这就是我收到失败消息的原因。问题是执行顺序,这里我对 javascript 逻辑的了解下降了 - 我不知道为什么我没有按 1、2、3、4 的顺序收到消息。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)