2013-08-08 3 views
1

Я пытаюсь определить, где будет храниться мой файл. Я начинаю с конечного пользователя и перемещаюсь внутрь, так что это означает начало пользовательского интерфейса. У меня есть ярлык и список, но у меня возникают проблемы с заполнением списка с папками и подпапками, которые находятся на моем Диске Google. Конечным продуктом будет: Щелкните раскрывающееся меню -> выберите папку для сохранения файла в -> нажмите «отправить» и сохранит его в папке.У меня есть список с каждой папкой в ​​myDrive

Вот что у меня есть до сих пор: (Не против всех моих заметок. У меня есть нулевой опыт JS и отсутствие опыта программирования, поэтому я изучаю код, который у меня уже есть у оригинального производителя шаблонов. кода, если вам это нужно: 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 

Спасибо за вашу помощь всем, я действительно ценю это!

+0

Ваш код кажется хорошим, но вы должны решить, как вы для обработки вложенных папок ... вы можете включить их в тот же список, где отображается полный путь, или показать дополнительный список, который появляется, когда пользователь выбирает папку ... в зависимости от того, насколько глубоко вы должны пойти это решение, может стать довольно сложным и трудно отображать. Какова была твоя первоначальная мысль? –

+0

Другая возможность - использовать один и тот же виджет списка, но изменить его содержимое в зависимости от выбора каждого пользователя, показывая родительское дерево в отдельной метке. Вероятно, это был бы самый простой способ :-) –

+0

Наличие текстового поля рядом с ним, показывающего подпапки, было бы неплохо. Или покажите текстовое поле под ним, в котором будут перечислены подпапки папки, выбранной в поле выше. Система папок действительно усложняется, потому что мне нужно идти по 4 папам, не включая корень. например, это: Корень (мой диск) -> Обзоры -> Обследованный человек -> опрошенный год -> месяц опрошен –

ответ

0

Вот тестовый код, который, кажется, работает. Я не тестировал его полностью, но, похоже, он делает то, что ему нужно ...

Я оставил текстовое поле с идентификатором, видимым для облегчения отладки, но вы должны установить его невидимым в конечном коде.

Есть, вероятно, несколько улучшений, чтобы добавить, но он дает общее представление о ...

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; 
} 

online here App, требуется авторизация для DocsList услуг

Смежные вопросы