Google App脚本:表单提交后自动刷新

时间:2014-02-10 10:21:17

标签: google-apps-script

所以我在谷歌网站上嵌入了一个应用程序脚本小工具。应用程序脚本的作用是从scriptdb获取对象并将其显示在屏幕上。还有一个添加按钮,您可以通过该按钮获得输入信息和添加对象的表单。我要做的是在保存对象后,重新填充对象并显示它们,这样就可以看到新创建的对象而无需手动刷新页面。

我有一个名为update()的函数,在保存对象后调用,此函数负责“自动刷新”。

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

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;

1 个答案:

答案 0 :(得分:1)

我对你的代码进行了一些测试。你需要做一些小改动:
您需要更改“var app = UiApp.createApplication();” for“var app = UiApp.getActiveApplication()”(已在评论中看到) 您没有声明“db”,如果您不纠正错误,您的脚本将系统地出错。

将更新函数实际更新网格的代码归于您的代码:

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