【发布时间】:2017-08-03 18:22:39
【问题描述】:
目前我用下面的代码来监听Sheet1!A1:B2的变化:
function addEventHandler() {
Office.context.document.bindings.addFromNamedItemAsync("Sheet1!A1:B2", "matrix", { id: "myBind" }, function (asyncResult) {
Office.select("binding#myBind").addHandlerAsync(Office.EventType.BindingDataChanged, onBindingDataChanged2016);
})
}
function onBindingDataChanged2016(eventArgs) {
Excel.run(function (ctx) {
var foundBinding = ctx.workbook.bindings.getItem(eventArgs.binding.id);
var myRange = foundBinding.getRange();
myRange.load(["address", 'values']);
return ctx.sync().then(function () {
console.log(JSON.stringify({ "address": myRange.address, "value": myRange.values }));
// costly reaction
})
})
}
因为我对改变的反应是相当代价高昂,我只想在真正需要的时候进行。我有两个问题:
1) 如果我想监听多个范围,是否可以为"Sheet1!A1:B2, Sheet1!A9:B10, Sheet1!A100:B120" 只定义一个监听器?我必须为每个范围添加一个处理程序吗?
2) 是否可以表达I listen only to the change of VALUES,而不是格式等?
选题:
是否可以在某处指定去抖动?例如,
我们用
0初始化一个时钟如果监听器被触发,我们记录变化的
binding id,并将时钟设置为0-
当时钟到达
1 second(即它已经安静了1秒)时,我们对所有记录的变化做出反应(即加载所有变化的范围并承担代价高昂的反应)
【问题讨论】:
标签: javascript underscore.js lodash office-js debouncing