我正在使用 Google Apps 脚本,并且尝试重复使用调用渲染的代码,这样我就不必重新输入所有内容。我遇到了一个似乎与“这个”转变有关的问题。
代码:
function render(displayMedium, template_name) {
var js = HtmlService.createTemplateFromFile('javascript.html');
var css = HtmlService.createTemplateFromFile('stylesheet.html');
var t = HtmlService.createTemplateFromFile(template_name);
js.config = config;
css.config = config;
t.config = config;
t.appProperties = appProperties;
js.appProperties = appProperties;
t.jsBlock = js.evaluate().getContent();
t.cssBlock = css.evaluate().getContent();
displayMedium(
HtmlService
.createHtmlOutput(t.evaluate())
.setSandboxMode(HtmlService.SandboxMode.NATIVE)
};
function renderSidebar(){
var displayMedium = DocumentApp.getUi().showSidebar;
var template_name = "app.html";
render(displayMedium, template_name);
};
当我调用 renderSidebar() 时,得到的错误如下:
[错误:内部错误:使用 [object Object] 作为无法转换为 Ui 类型的“this”值调用方法“showSidebar”。
有什么想法可以解决这个问题吗?
最佳答案
如果将函数绑定(bind)到 UI 对象,它应该可以工作:
var displayMedium = DocumentApp.getUi().showSidebar.bind(DocumentApp.getUi());
当您获取该函数引用时,除非您执行上述操作,否则运行时将(或可能;这里显然是这样做的)使用其他一些 this
值(取决于 API)调用该函数)。
关于javascript - "this"无法转换为Ui类型的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20912368/