目的は、いつでも最後の行だけを、最後の削除ボタンだけで削除することです。
同じ行の乗算として構築されるユーザーインターフェイスがあります。行数は、行の要素でもある「追加」および「削除」ボタンによって制御されます。問題は、行番号を格納することによってインスタンスを区別するために各行に適用される非表示のウィジェットが、最後の番号とまったく同じ番号を格納していることです。適切な番号(0)を格納する最初の(0)非表示ウィジェットを除きます。どこにポイントがありませんか?これはどのように解決する必要がありますか?
削除ボタンには2つの異なる目的があるため(ここでは詳しく説明しません)、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; }
目的は、いつでも最後の行だけを、最後の削除ボタンだけで削除することです。
どうもありがとう。