【问题标题】:Office 2013 Javascript API - Pass Variable to Callback of ".BindingDataChanged"Office 2013 Javascript API - 将变量传递给“.BindingDataChanged”的回调
【发布时间】:2017-05-29 00:25:30
【问题描述】:

背景

我正在为 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
}

但是,这不起作用。


问题

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

【问题讨论】:

  • 变量“data”从何而来?
  • 这是一个通过Office.context.document.settings.get('bindingIDs');检索的设置。它用于搜索框,每次击键都会更新,但设置不会每次都改变,所以我想避免一遍又一遍地查询设置。
  • 目前我正在创建一个半全局变量,在我的顶级自启动函数内部但在我的Office.initialize = 之外。不过,这似乎很草率。

标签: javascript office-2013


【解决方案1】:

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

【讨论】:

  • 这行得通,谢谢!您能否解释一下数据如何通过返回的函数传递,或者向我指出一些可能解释的资源。我真的不明白data 是如何下降到searchThroughData 变量的。
  • 当然。您正在寻找“关闭”的概念。这是一个stackoverflow链接stackoverflow.com/questions/111102/…
  • 非常感谢!强制等待期结束后,我将在明天奖励赏金。
  • 很高兴我能帮上忙。 :)
  • bmacity,我想知道您是否可以回答后续问题。如果我希望能够让data 改变并保持活力(在addHandler 运行之前不为人所知),我可以让它工作吗?每次更改绑定数据时都喜欢使用 live 变量吗?
猜你喜欢
  • 2011-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-23
  • 2012-01-28
相关资源
最近更新 更多