Office 2013 Javascript API-将变量传递到“”的回调;.BindingDataChanged”;

Office 2013 Javascript API - Pass Variable to Callback of ".BindingDataChanged"

本文关键字:回调 BindingDataChanged Javascript 2013 API- 变量 Office      更新时间:2023-09-26

背景

我正在为Excel2013编写一个侧边栏应用程序,我有一个包装器功能,可以更新侧边栏的视图。我需要从多个事件中触发该函数(从而触发视图的更新),其中之一是绑定区域中的数据发生更改时。

我遇到的问题是,我需要将一个变量传递给那个包装器函数。它需要数据,我希望能够保存在设置中,然后只加载一次。


代码

当前代码:

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
}

然而,这并不奏效。


问题

有什么想法可以传递这个变量吗?

在您尝试的解决方案中,您正在调用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
}