目的是在任何时候只删除最后一行,并且只能通过最后一个删除按钮。
有一个用户界面,它建立为同一行的乘法。行数由“添加”和“删除”按钮控制,这些按钮也是行的元素。问题是隐藏的小部件 - 应用于每一行以通过存储它们的行号来区分实例 - 存储的是最后一个相同的数字。除了存储正确数字 (0) 的第一个 (0) 隐藏小部件。我在哪里错过了重点?这应该如何解决?
根据删除按钮有两个不同的用途(此处不详),我们使用 cacheService 将最后一行与其他所有行区分开来。任何时候都应该只删除最后一行。
var cache = CacheService.getPrivateCache();
我们清除缓存并创建第一个实例
function doGet() {
var app = UiApp.createApplication();
app.add(app.createVerticalPanel().setId('mainContainer'));
cache.removeAll([]);
ui(0);
cache.put('numberOfInstances',0);
return app; }
每个实例都由一个水平面板保存,其中包含提到的隐藏小部件、通知实例编号的标签以及添加和删除按钮。
function ui(instance) {
var app = UiApp.getActiveApplication();
var eventContainer = app.createHorizontalPanel()
.setId('eventContainer' + instance);
var instanceContainer = app.createHidden('instanceContainer',instance);
var showInstance = app.createLabel(instance)
.setId('showInstance' + instance);
var addButton = app.createButton('Add')
.setId('add' + instance)
.addClickHandler(app.createClientHandler()
.forEventSource().setEnabled(false)) //avoiding multiple click during server response
.addClickHandler(app.createServerHandler('add')
.addCallbackElement(instanceContainer));
var removeButton = app.createButton('X')
.addClickHandler(app.createServerHandler('remove')
.addCallbackElement(instanceContainer));
app.getElementById('mainContainer')
.add(eventContainer
.add(instanceContainer)
.add(showInstance)
.add(addButton)
.add(removeButton));
return app; }
和事件处理...
function add(inst) {
var app = UiApp.getActiveApplication();
var instance = Number(inst.parameter.instanceContainer);
ui(instance+1);
cache.put('numberOfInstances',instance+1);
return app; }
function remove(inst) {
var app = UiApp.getActiveApplication();
var instance = Number(inst.parameter.instanceContainer);
var numberOfInstances = cache.get('numberOfInstances')
if( (instance != 0) && (instance = numberOfInstances) ) {
app.getElementById('mainContainer').remove(app.getElementById('eventContainer' + instance));
cache.put('numberOfInstances',instance-1);
app.getElementById('add' + (instance-1)).setEnabled(true); } //avoiding multiple click during server response
return app; }
目的是在任何时候只删除最后一行,并且只能通过最后一个删除按钮。
非常感谢。