0

請求書の項目の金額を追加/削除するエディター グリッド パネル (フォーム内) があります。グリッドからの項目の金額は、グリッドの外側でフォームの内側にある [Amount due] フィールドに追加されます。'Amount due' フィールドに別の場所 (グリッドではない) からの金額がある可能性があります。グリッドから「Amount due」フィールドにいくつかの金額を加算および減算できます。ただし、[送信] ボタンを 2 回押すと (1 回だけのはずだったのに)、[請求額] がゼロにクリアされます。[送信] ボタンを誤って 2 回押したときに、[請求額] フィールドがクリアされないようにするにはどうすればよいですか? 私のコードで何を変更する必要がありますか? 助けてくれてありがとう。

var iLineItemTotalHold = 0;{
        text: 'Submit',
        tooltip:'Submit the line item',
        handler: function(){
            iLineItemGrid.stopEditing();
            // Will this code save changes to the database?
            //iLineItemGrid.getStore().commitChanges();
            iLineItemStore.commitChanges();
            // What I want done here is when the amount field in the grid is saved it
            // updates the 'Amount Due' field (outside of the grid) in the form.
            //Does this code update the Amount Due field in the form?

            var iAmountTotalForLineItems = 0;
            var iAmountInDueField = Ext.getCmp('iAmountDue').value;
            var tempTotal = 0;
            var result = 0;
            iLineItemStore.each(function(addAmount){
                iAmountTotalForLineItems += addAmount.get('i_line_item_amt');

            });

            alert('1 iAmountInDueField: ' + iAmountInDueField +' iLineItemTotalHold: '+iLineItemTotalHold + ' iAmountTotalForLineItems: '+ iAmountTotalForLineItems);
            if (iLineItemTotalHold > iAmountTotalForLineItems  ){
                alert ('if');
                tempTotal =  iLineItemTotalHold - iAmountTotalForLineItems;
                result = iAmountInDueField - tempTotal;
                alert('two: '+result+' = '+iAmountInDueField+' + '+tempTotal );

            }

            else if (iLineItemTotalHold < iAmountTotalForLineItems  ){
                alert ('if2');
                tempTotal = iAmountTotalForLineItems - iLineItemTotalHold;
                result = iAmountInDueField + tempTotal;
                alert('3: '+result+' = '+iAmountInDueField+' - '+tempTotal );
            }

            iLineItemTotalHold  =  iAmountTotalForLineItems;

            Ext.getCmp('iAmountDue').setValue(result);
        },
        scope:this
    }
4

1 に答える 1

0

関数の最後に次をhandler追加します。

this.setDisabled(true);

ボタンを無効にして、それ以上のクリックを防ぐため。

次に、グリッドのeditイベントにリスナーを追加して、編集が完了したときにボタンを再度有効にします。何かのようなもの:

Ext.create('Ext.grid.Panel', {
    // your other grid configs
    listeners: {
        edit: function(editor, edit) {
            var form = edit.grid.up('form'),
                button = form.down('button[text=Submit]');

            // enable the button after the grid is edited
            button.setDisabled(false);
        }
    }
});

次に、ボタンをとして開始することもお勧めしますdisabled: true。グリッドが最初に編集されると、ボタンはそのeditハンドラーで有効になります。

于 2012-08-02T17:01:27.293 に答える