Office 2013 Javascript API - 将变量传递给" .BindingDataChanged"

时间:2014-09-19 21:01:40

标签: javascript office-2013

背景

我正在为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
}
但是,这并不起作用。


问题

我可以传递这个变量的任何想法吗?

1 个答案:

答案 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
}