Office 2013 Javascript API-将变量传递到";的回调;。BindingDataChanged"; 背景

Office 2013 Javascript API-将变量传递到";的回调;。BindingDataChanged"; 背景,javascript,office-2013,Javascript,Office 2013,我正在为Excel 2013编写一个边栏应用程序,我有一个包装器函数,可以更新边栏的视图。我需要从多个事件触发该函数(从而触发视图的更新),其中一个事件是当绑定区域中的数据发生更改时 我遇到的问题是,我需要向包装器函数传递一个变量。它需要的数据,我希望能够保存在一个设置,然后加载一次 代码 当前代码: 上述操作将触发重新绘制。但它不包括传递的变量。我希望代码是这样的: 已尝试,但不起作用: 然而,这不起作用 问题: 您知道如何传递此变量吗?在您尝试的解决方案中,您正在调用onBindingD

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

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


代码 当前代码: 上述操作将触发重新绘制。但它不包括传递的变量。我希望代码是这样的:

已尝试,但不起作用: 然而,这不起作用


问题:
您知道如何传递此变量吗?

在您尝试的解决方案中,您正在调用onBindingDataChanged函数,而不是让处理程序可以调用它。您需要这样做(假设变量“data”事先可用)

如果数据是一个全局变量,您可以

Office.select("bindings#"+bindingID).addHandlerAsync(Office.EventType.BindingDataChanged, onBindingDataChanged(data));

function onBindingDataChanged(eventArgs) {
    searchThroughData(eventArgs.binding.id, data);
}

function searchThroughData(bindingID,data) {
    //repaint view
}

变量“data”从何而来?它是一个通过
Office.context.document.settings.get('bindingID')检索的设置。它被用在搜索框中,搜索框在每次击键时都会更新,但设置不会每次都更改,因此我希望避免反复查询设置。目前,我正在创建一个半全局变量,在我的顶级自启动函数内部,但在我的
Office.initialize=
外部。不过这看起来很草率。这很有效,谢谢!您能否解释一下数据是如何通过返回函数传递的,或者让我看一些可能会解释的资源。我真的不明白
数据
是如何深入到
搜索数据
变量的。您正在寻找“关闭”的概念。这里有一个stackoverflow链接,非常感谢!在强制等待期结束后,我将于明天颁发奖金。很高兴我能提供帮助。:)B城市,我想知道你是否能回答下一个问题。如果我希望能够更改
数据
并使其处于活动状态(在运行
addHandler
之前不知道),我可以让它工作吗?是否希望在每次更改绑定数据时使用live变量?
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
}
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
}