2014-02-10 46 views
0

因此,我有一个嵌入在谷歌网站的应用脚本小工具。应用程序脚本所做的是从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; 
+0

不知道,如果代码工作的其余部分,但改变“VAR应用= UiApp.createApplication();”为“var app = UiApp.getActiveApplication()”。 – Harold

+0

有道理,我改变了它,但不起作用 – nupac

回答

1

我对你的代码做了一些小测试。您需要做一些小的更改:
您需要更改“var app = UiApp.createApplication();”为“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; 
} 
+0

谢谢,这有点作品。我已经声明'db'是一个全局变量,所以我已经解决了。但是,除了'UiApp.getActiveApplication()'之外,你还有什么改变吗?我找不到其他的东西。 – nupac

+0

我添加了“var db = ScriptDb.getMyDb();” – Harold

+0

注释掉该行,它仍然有效。奇怪的。不管怎么说,多谢拉。尽管每次更新方法被调用时,网格似乎都会移动1行。你能想到这可能发生的原因吗? – nupac