我正在为Excel 2013编写侧边栏应用程序,我有一个更新侧边栏视图的包装函数。我需要从多个事件触发该函数(并因此触发视图的更新),其中一个事件是绑定区域中的数据发生变化。
我遇到的问题是我需要将变量传递给该包装函数。它需要我希望能够在设置中保存的数据,然后加载一次。
Office.select("bindings#"+bindingID).addHandlerAsync(Office.EventType.BindingDataChanged, onBindingDataChanged);
function onBindingDataChanged(eventArgs) {
searchThroughData(eventArgs.binding.id);
}
function searchThroughData(bindingID) {
//repaint view
}
以上工作可以触发重绘。但它并没有包含传递的变量。我期望的是代码是这样的:
Office.select("bindings#"+bindingID).addHandlerAsync(Office.EventType.BindingDataChanged, onBindingDataChanged(eventArgs,data));
function onBindingDataChanged(eventArgs,data) {
searchThroughData(eventArgs.binding.id,data);
}
function searchThroughData(bindingID,data) {
//repaint view
}
但是,这并不起作用。
我可以传递这个变量的任何想法吗?
答案 0 :(得分:2)
在您尝试的解决方案中,您正在调用onBindingDataChanged函数,而不是让它可供调用处理程序调用。你需要做这样的事情(假设变量"数据"事先可用)
Office.select("bindings#"+bindingID).addHandlerAsync(Office.EventType.BindingDataChanged, onBindingDataChanged(data));
function onBindingDataChanged(data) {
return function(eventArgs) {
searchThroughData(eventArgs.binding.id, data);
};
}
function searchThroughData(bindingID,data) {
//repaint view
}
如果数据是全局变量,则可以执行
Office.select("bindings#"+bindingID).addHandlerAsync(Office.EventType.BindingDataChanged, onBindingDataChanged(data));
function onBindingDataChanged(eventArgs) {
searchThroughData(eventArgs.binding.id, data);
}
function searchThroughData(bindingID,data) {
//repaint view
}