AppMaker 和选择器小部件 - 上传到特定文件夹
Posted
技术标签:
【中文标题】AppMaker 和选择器小部件 - 上传到特定文件夹【英文标题】:AppMaker and picker widget - uploading to a specific folder 【发布时间】:2018-07-26 18:08:55 【问题描述】:我正在尝试使用一个按钮来允许用户将文件上传到特定文件夹中。我尝试遵循其他建议,并将此挂钩添加到
onPickerInit:
var uploadView = new google.picker.DocsUploadView()
uploadView.setParent('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'); // test folder
pickerBuilder.addView(uploadView);
我已经设置了 MULTISELECT_ENABLED 功能(没有它,目标文件夹不被尊重),我现在可以上传它们所属的文件。耶!
但是:选择器小部件现在有 两个 上传选项卡。第一个只是定期上传到驱动器主文件夹,第二个选项卡是正确的。我的猜测是 appmaker 在幕后构造了第一个上传选项卡,并且没有禁用此功能的功能。
这显然相当古怪,几乎无法使用。我的问题是:
1)pickerbuilder 中是否有(可能未记录的)API 调用来删除原始上传视图?
2) 即使 MULTISELECT 功能关闭,是否也可以尊重目标文件夹?
非常感谢任何务实的解决方案!
【问题讨论】:
【参考方案1】:编辑 07/28/2020
由于驱动器选择器的不断变化,此代码旨在提供更永久的解决方案:
var folderId = "10fYS3l32R6gk79POOSS8X_Vbsz7vqzRWX"; //the desired folder id
var prps = [];
for(var prop in pickerBuilder)
var value = pickerBuilder[prop];
if(!!value)
if(typeof(value)==="object")
var proto = value.__proto__; //jshint ignore: line
if(!!proto["addLabel"] && !!proto["addView"])
prps.push(prop);
for(var key in value)
var target = value[key];
var type = Object.prototype.toString.call(target);
if(type === "[object Array]")
prps.push(key);
for(var key in target[0])
var value = target[0][key];
if(typeof(value)==="object")
prps.push(key);
for(var key in target[0])
var value = target[0][key];
if(typeof(value)==="string")
prps.push(key);
var views = pickerBuilder[prps[0]][prps[1]];
for(var i=0; i<views.length; i++)
var view = views[i];
if(view[prps[3]] === "upload")
view[prps[2]].parent = folderId;
编辑 06/29/2020
驱动器选择器 API 发生了另一项更改。要完成这项工作,请更改您必须做的事情:
var folderId = "10fYS3l32R6gk79POOSS8X_Vbsz7vqzRWX"; //the desired folder id
pickerBuilder.rw.kf["0"].Ta.parent = folderId;
编辑 2020 年 5 月 26 日
驱动器选择器 API 发生了另一项更改。要完成这项工作,请更改您必须做的事情:
var folderId = "10fYS3l32R6gk79POOSS8X_Vbsz7vqzRWX"; //the desired folder id
pickerBuilder.xw.jf["0"].Ta.parent = folderId;
编辑 2020 年 2 月 17 日
驱动器选择器 API 发生了变化。要完成这项工作,请更改您必须做的事情:
var folderId = "10fYS3l32R6gk79POOSS8X_Vbsz7vqzRWX"; //the desired folder id
pickerBuilder.mw.$e["0"].Ra.parent = folderId;
直接回答您的问题:
1.) 是 2.) 是的
现在,让我们深入了解一下幕后发生的事情。你是对的:
我的猜测是 appmaker 在幕后构造了第一个上传选项卡,并且没有禁用此功能的功能。
但是,我们可以操纵对象。因此,与其创建新的选择器视图,不如简单地配置默认的选择器将文件上传到您想要的文件夹。我们可以通过以下方式实现:
1.) 将 Drive Picker 插入 UI 后,确保 Drive Picker Properties 全部为空:
2.) 接下来,转到事件处理程序并单击 onPickerInit 事件处理程序。输入以下代码:
var folderId = "10fYS3l32R6gk79POOSS8X_Vbsz7vqzRWX"; //the desired folder id
pickerBuilder.SW.Vq["0"].mc.parent = folderId;
总之,我得出的结论是,属性SW 包含驱动器视图数组,这些视图保存在属性Vq 下。 Vq["0"] 是视图数组中的第一个视图,mc 属性包含特征;因此 parent = folderId.
【讨论】:
工作就像一个魅力。出于好奇,您是如何检查 pickerBuilder 对象或找到代码进行分析的? 为了回答我自己的问题,我只是将选择器对象字符串化到控制台并得到类似 "Mda":"docs.google.com/picker","SW":"Vq":["El":"upload ","mc": "query":"docs","parent":"XXXXX"],"mc":,"wi":,"Wba":[]跨度>以上是关于AppMaker 和选择器小部件 - 上传到特定文件夹的主要内容,如果未能解决你的问题,请参考以下文章