有一个列表框与myDrive中的每个文件夹一起填充 [英] Have a listbox populate with every folder in myDrive

查看:89
本文介绍了有一个列表框与myDrive中的每个文件夹一起填充的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图定义我的文件要保存到的位置。我从最终用户开始向内移动,这意味着UI的开始。我有标签和列表框,但我遇到了与我的Google云端硬盘中的文件夹和子文件夹一起填充列表框的麻烦。最终产品将是:点击下拉菜单 - >选择文件夹保存文件 - >点击提交,并将其保存到文件夹中。



这里是到目前为止:(不介意我所有的笔记,我没有JS经验,也没有编程经验,所以我正在从原始模板制作者那里获得的代码学习,如果你需要,这是所有的代码它: http://pastebin.com/rbvu5Pie

  //在这里查看有关列表框的代码以显示文件夹
grid.setWidget(2,0,app.createLabel('Folder:')); //使列表框旁边的标签为文件夹
var list = app.createListBox(); //定义当我说列表
时grid.setWidget(2,1,list); //将列表框放在标签的右侧

var folder = DocsList.getAllFolders()[0]; (定义,当我说文件夹它应该得到所有文件夹
为(var i = 0;我< folder.length; i ++){
list.addItem(folder [i] .getName(),folder [i] .getId())
}
//这是列表框显示文件夹的代码的结尾

感谢大家的帮助,我真的很感谢它!

解决方案

<这是一个似乎可行的测试代码。我没有彻底测试它,但它似乎做了它必须做的事情......



我离开文本框,ID为可见,以便于调试,但您应该在最终代码中将其设置为不可见。



可能有一些添加的改进,但它提供了一般想法...

 函数doGet(){
var app = UiApp.createApplication();
var curFN = app.createTextBox()。setText('MyDrive /')。setName('curFN')。setId('curFN')。setWidth('400');
var curFID = app.createTextBox()。setText('x')。setName('curFID')。setId('curFID')。setWidth('400');
var list = app.createListBox()。setName('list').setId('list')。addItem('请选择一个文件夹','x');
var grid = app.createGrid(3,2).setText(0,0,'选择驱动器中的文件夹')。setWidget(0,1,curFN).setWidget(2,1,curFID)。 setWidget(1,1,列表);
var folders = DocsList.getRootFolder()。getFolders();
for(var i = 0; i< folders.length; i ++){
list.addItem(folders [i] .getName(),folders [i] .getId())
}
var handler = app.createServerHandler('folderSelect')。addCallbackElement(grid);
list.addChangeHandler(handler);
app.add(grid);
返回应用程序;



function folderSelect(e){
var app = UiApp.getActiveApplication();
var currentFN = e.parameter.curFN;
var currentFID = e.parameter.list;
Logger.log(currentFID);
var list = app.getElementById('list');
var curFN = app.getElementById('curFN');
var curFID = app.getElementById('curFID');
if(currentFID =='x'){currentFID = DocsList.getRootFolder()。getId(); curFN.setText( MyDrive /)};
var startFolder = DocsList.getFolderById(currentFID);
var folders = startFolder.getFolders();
list.clear()。addItem('no other subFolder','x')。addItem('返回根目录','x');
if(folders.length> 0){list.clear(); list.addItem('请选择一个子文件夹','x')};
for(var i = 0; i< folders.length; i ++){
list.addItem(folders [i] .getName(),folders [i] .getId())
}
curFN.setText(currentFN + DocsList.getFolderById(currentFID).getName()+'/');
if(currentFID == DocsList.getRootFolder()。getId()){curFN.setText('MyDrive /')};
curFID.setText(currentFID);
返回应用程序;
}

应用 online here ,需要文档清单服务授权

I am trying to define where my file is to be saved to. I am starting out at the end user and moving inwards, so that means the start of the UI. I have the Label and the listbox but I am having troubles populating the listbox with the folders and sub folders that are in my Google Drive. The end product will be: Click the drop down menu -> chose folder to save file into -> click "submit" and it saves it into the folder.

Here is what i have so far: (Don't mind all my notes. I have zero JS experience and no programming experience so i am learning from the code that i already have from the original template maker. This is all of the code if you need it: http://pastebin.com/rbvu5Pie )

    //look here for code about the listbox to show folders
  grid.setWidget(2, 0, app.createLabel('Folder:')); //makes the label "folder" next to the listbox
  var list = app.createListBox(); //defines what to do when i say list
  grid.setWidget(2, 1, list); //puts the listbox to the right of the label

  var folder = DocsList.getAllFolders()[0]; //defines that when i say "folder" it is supposed to get all folders
  for (var i = 0; i < folder.length; i++) {
    list.addItem(folder[i].getName(),folder[i].getId())
  }
  //this is the end of the code for the listbox showing folders

Thanks for your help everyone, i really appreciate it!

解决方案

Here is a test code that seems to work. I didn't test it thoroughly but it seems to do what it has to do...

I left the textBox with ID visible to make it easier to debug but you should set it invisible in the final code.

There are probably a few improvements to add but it gives the general idea...

function doGet(){
  var app = UiApp.createApplication();
  var curFN = app.createTextBox().setText('MyDrive/').setName('curFN').setId('curFN').setWidth('400');
  var curFID = app.createTextBox().setText('x').setName('curFID').setId('curFID').setWidth('400');
  var list = app.createListBox().setName('list').setId('list').addItem('please select a folder','x');
  var grid = app.createGrid(3,2).setText(0,0,'Choose a folder in your drive').setWidget(0,1,curFN).setWidget(2,1,curFID).setWidget(1,1,list);
  var folders = DocsList.getRootFolder().getFolders();
  for (var i = 0; i < folders.length; i++) {
    list.addItem(folders[i].getName(),folders[i].getId())
  } 
  var handler = app.createServerHandler('folderSelect').addCallbackElement(grid);
  list.addChangeHandler(handler);
  app.add(grid);
  return app;
}


function folderSelect(e){
  var app = UiApp.getActiveApplication();
  var currentFN = e.parameter.curFN;
  var currentFID = e.parameter.list;
  Logger.log(currentFID);
  var list = app.getElementById('list');
  var curFN = app.getElementById('curFN');
  var curFID = app.getElementById('curFID');
  if(currentFID=='x'){currentFID=DocsList.getRootFolder().getId() ; curFN.setText('MyDrive/')};
  var startFolder = DocsList.getFolderById(currentFID);
  var folders = startFolder.getFolders();
  list.clear().addItem('no other subFolder','x').addItem('Go back to Root','x');
  if(folders.length>0){list.clear(); list.addItem('please select a subFolder','x')};
  for (var i = 0; i < folders.length; i++) {
    list.addItem(folders[i].getName(),folders[i].getId())
  } 
  curFN.setText(currentFN+DocsList.getFolderById(currentFID).getName()+'/');
  if(currentFID==DocsList.getRootFolder().getId()){curFN.setText('MyDrive/')};
  curFID.setText(currentFID);
  return app;
}

App online here, needs authorization for Docslist Service

这篇关于有一个列表框与myDrive中的每个文件夹一起填充的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆