Google App脚本:提交表单后自动刷新 [英] Google App Script: Auto Refresh after form submission

查看:80
本文介绍了Google App脚本:提交表单后自动刷新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

因此,我在Google网站中嵌入了一个应用脚本小工具.应用程序脚本的作用是从scriptdb获取对象并将其显示在屏幕上.还有一个添加按钮,单击该按钮可获得表格以输入信息并添加对象.我想做的是,保存对象后,我将重新填充该对象并显示它们,以便无需手动刷新页面即可看到新创建的对象.

So I have an app script gadget embedded in a google site. What the app script does is get objects from scriptdb and display it on the screen. There also is an add button clicking on which you get a form to enter information and add objects. What I am trying to do is that after an object is saved, I repopulate the object and display them so the newly created object can be seen without manually refreshing the page.

我有一个名为update()的函数,该函数在保存对象后调用,该函数负责自动刷新".

I have a function called update() that is called after an object is saved and this function takes care of the "auto refresh".

save()函数中,我使用此语法update()调用更新函数.这是submit()函数

In the save() function, I call the update function with this syntax, update(). Here is the submit() function

function SaveAssignment(e){
    var db = ScriptDb.getMyDb();
    var app = UiApp.getActiveApplication();

   var name = e.parameter.assignmentname;
   var date = e.parameter.assignmentdate.toString();
   var desc = e.parameter.assignmentdesc;
   var category = e.parameter.assignmentcategory;
   var totalscore = e.parameter.assignmenttotalscore;

   var site = SitesApp.getActiveSite();

   var assignment = { name: name,
                date: date,
                description: desc,
                url: pageUrl + '?name='+name+'&date='+date+'&description='+desc+'&id='+sheetId,
                sheetid: sheetId,
                totalScore: totalscore,
                Category: category
               };

  db.save(assignment);

  update();
}

这是我的update()方法

function update(){
  var app = UiApp.createApplication();

  var oldGrid = app.getElementById('grid');
  app.remove(oldGrid);

  var handler = app.createServerHandler('AddAssignment');

  var addAssignmentButton = app.createButton('Add Assignment', handler);

  var assignments = db.query({});
  var i = 1;
  var j = 1;

  var grid; 
  if(assignments.getSize() < 1){
    grid =  app.createGrid(3, 5).setId('grid');
  }
  else{
   grid = app.createGrid(assignments.getSize() + assignments.getSize() + assignments.getSize(), 5).setId('grid');
  }
  handler.addCallbackElement(grid);
  grid.setWidget(0, 2, addAssignmentButton);

  while(assignments.hasNext()){
    var assignment = assignments.next();
    var name = assignment.name;
    var date = assignment.date;
    var description = assignment.description;

    var nameLabel = app.createLabel('Assignment ' + i + ' : ' + name).setVisible(true);
    var dateLabel = app.createLabel('Date: ' + date).setVisible(true);
    var idLabel = app.createLabel(assignment.getId()).setVisible(false);
    var deletebutton = app.createButton('Delete Assignment');
    var handler = app.createServerHandler('deleteAssignment');

   handler.addCallbackElement(idLabel);
   deletebutton.addClickHandler(handler);

   grid.setWidget(j, 0, nameLabel);
   j = j + 1;
   grid.setWidget(j, 0, dateLabel);
   grid.setWidget(j, 1, deletebutton);
   grid.setWidget(j, 3, idLabel);

    i++;
    j = j + 2;
 }
 app.add(grid);
 return app;

推荐答案

我对您的代码做了一些小测试.您需要做一些小改动:
您需要更改"var app = UiApp.createApplication();"用于"var app = UiApp.getActiveApplication()"(已在注释中看到).
您没有声明"db",如果您不纠正它,脚本将系统地出错.

I made some little test on your code. you need to do some little changes:
You need to change "var app = UiApp.createApplication();" for "var app = UiApp.getActiveApplication()" (already saw that in comment).
You didn't declared "db" your script will systematically be in error if you don't correct that.

在更新功能实际更新网格的地方添加代码:

Bellow your code where the update function actually update the grid:

function doGet(){
 var app = UiApp.createApplication();
  var grid = app.createGrid(3, 3).setId("grid").setWidget(1, 2, app.createLabel("test"));
  grid.addClickHandler(app.createServerHandler("update"));
  app.add(grid);
  return(app);
}

function update(){
  var app = UiApp.getActiveApplication(); // getActiveApplication

  var oldGrid = app.getElementById('grid');
  app.remove(oldGrid);

  var handler = app.createServerHandler('AddAssignment');
  var addAssignmentButton = app.createButton('Add Assignment', handler);
  var db = ScriptDb.getMyDb();
  var assignments = db.query({}); // YOU DIDNT DECLARED db

  var i = 1;
  var j = 1;
  var grid; 
  if(assignments.getSize() < 1){
    grid =  app.createGrid(3, 5).setId('grid');
  }
  else{
   grid = app.createGrid(assignments.getSize() + assignments.getSize() + assignments.getSize(), 5).setId('grid'); // assignments.getSize()*3
  }
  handler.addCallbackElement(grid);
  grid.setWidget(0, 2, addAssignmentButton);

  while(assignments.hasNext()){
    var assignment = assignments.next();
    var name = assignment.name;
    var date = assignment.date;
    var description = assignment.description;
    var nameLabel = app.createLabel('Assignment ' + i + ' : ' + name).setVisible(true);
    var dateLabel = app.createLabel('Date: ' + date).setVisible(true);
    var idLabel = app.createLabel(assignment.getId()).setVisible(false);
    var deletebutton = app.createButton('Delete Assignment');
    var handler = app.createServerHandler('deleteAssignment');
   handler.addCallbackElement(idLabel);
   deletebutton.addClickHandler(handler);
   grid.setWidget(j, 0, nameLabel);
   j = j + 1;
   grid.setWidget(j, 0, dateLabel);
   grid.setWidget(j, 1, deletebutton);
   grid.setWidget(j, 3, idLabel);
    i++;
    j = j + 2;
 }
 app.add(grid);
 return app;
}

这篇关于Google App脚本:提交表单后自动刷新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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