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 和选择器小部件 - 上传到特定文件夹的主要内容,如果未能解决你的问题,请参考以下文章

Kivy 日期选择器小部件

Qt 颜色选择器小部件?

如何使用django管理员多对多个字段选择器小部件

Qt:如何将类连接到自定义 Qt 设计器小部件

颤振步进器小部件 - 在各个步骤中验证字段

自定义 Qt 设计器小部件:包含自定义垂直布局的滚动区域