0

エディター グリッドがあり、送信ボタンを押すと、合計が [Amount due] フィールドに追加され、無効になります (これは良いことです)。私の問題は、追加ボタンを押して新しいレコードを作成するたびに送信ボタンを再度アクティブにできないことです。

私の問題は、グリッドのリスナーにあります。これはこれを行う正しい方法ですか?これを行うためのより良い方法を知っている場合は、お知らせください。これが私のコードです:

var iLineItemGrid = new Ext.grid.EditorGridPanel({
    id: 'iLineItemStore',
    store: iLineItemStore,
    cm: iLineItemCM,
    cls: 'iLineItemGrid',
    width: 'auto',
    height: 'auto',
    frame: true,
    //title:'Edit Plants?',
    //plugins:checkColumn,
    clicksToEdit: 1,
    viewConfig: {
        //forceFit: true
        autoFit: true
    },
    //new
    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);
        }
    },

    tbar: [{
        text: 'Add',
        tooltip: 'Add the line item',
        handler: function () {
            var r = new iLineItemRec({
                i_line_item_name: '',
                i_line_item_amt: ''
            });
            iLineItemGrid.stopEditing();
            iLineItemStore.insert(0, r);
            iLineItemGrid.startEditing(0, 0);
        },
        //Should this be scope:this or scope:iLineItemGrid?
        scope: this
    }, {
        text: 'Delete',
        tooltip: 'Remove the selected line item',
        handler: function () {
            iLineItemGrid.stopEditing();
            var r = iLineItemGrid.getSelectionModel().getSelectedCell();
            iLineItemStore.removeAt(r[1]);
        },
        //     handler: function(){
        //       iLineItemGrid.stopEditing();
        //       var r = iLineItemGrid.getSelectionModel().getSelected();
        //       iLineItemStore.removeAt(r[0]); }
        //  },

        //Should this be scope:this or scope:iLineItemGrid?
        scope: this
    },

           {
               xtype: 'tbfill'
           },

           {
               text: 'Submit',
               tooltip: 'Submit the line item',
               //new
               //disabled: true,
               handler: function () {
                   iLineItemGrid.stopEditing();
                   // Will this code save changes to the database?
                   //iLineItemGrid.getStore().commitChanges();
                   iLineItemStore.commitChanges();

                   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);
                   this.setDisabled(true);
               }
               //scope:this
           }

          ]

});
4

2 に答える 2

0

idに注意してください。同じ ID を持つ 2 つのフォームを開いていると、問題が発生します。ボタンまたはアクションに名前を設定します。

送信ボタン:

 {
        text: 'Submit',
        tooltip:'Submit the line item',
        action: 'submit',
        // Your other stuff...
 }

追加ボタン:

{
        text: 'Add',
        tooltip:'Add the line item',
        handler : function(){
            var r = new iLineItemRec({
                i_line_item_name: '',
                i_line_item_amt: ''
            });
            iLineItemGrid.stopEditing();
            iLineItemStore.insert(0, r);
            iLineItemGrid.startEditing(0, 0);
            iLineItemGrid.down('button[action=submit]').setDisabled(false);
        },
        //The scope here depends on what you want the 'this' variable to be in your handler. 
        //If you want it to be the grid then give iLineItemsGrid, if you want it to be the button you don't have to give a scope. 
        //But scope: this is dangerous because the this in your case is not the grid
        scope:iLineItemsGrid
}
于 2012-08-09T07:40:17.483 に答える
0

まず、[送信] ボタンに一意の ID を割り当てる必要があります。idプロパティを使用できます。

次に、[追加] ボタンのハンドラーに次の行を追加して、送信ボタンを再度アクティブにします。

Ext.getCmp('submit_button_id_goes_here').setDisabled(false);
于 2012-08-09T04:29:42.683 に答える