2

EXTJS 4.0.7 gpl を使用しています。form/form-grid.js の下の例を使用しています。フォームに表示されるエントリを編集した後、例のグリッドをリロードしたいと考えています。

PHP Web サービスを使用してフォーム グリッドにデータをロードしています。編集時にフォーム入力を処理し、グリッド内の値を更新するようにハンドラーを設定しました。正常に動作し、データベースを更新します。成功すると、ストアのリロードを呼び出し、以下の関数呼び出しを使用して (FireBug で) リロード時に JSON が戻ってくるのを確認しますが、データはグリッドにロードされません。ストア ロードから返されたデータを取得してグリッドに入力し、更新する方法。

最終的には MVC を使用したいと思いますが、今のところ、form.submit の成功時に form-grid でグリッドをリロードできるようにしたいと考えています。

ストアに「tvdStore」の「storeId」があり、次を使用してストアのリロードを行います。

{
    xtype: 'button',
    text: 'Save',
    style: 'margin: 0 5px 0 5px',
        handler: function (button) {

        // when this button is clicked, sumbit this form
        var form = this.up('form').getForm();

        var rating = form.findField("rating").getValue();
        var formTargetId = form.findField("ID").getValue();
        var formFamilyName = form.findField("FAMILYNAME").getValue();
        var formTargetName = form.findField("TARGETNAME").getValue();
        var formTableName = form.findField("TABLENAME").getValue();

        // convert the int value back to a string
        var stringVal = "";
        if (rating === true) {
            stringVal = 'Yes';
        } else if (rating === false) {
            stringVal = 'No';
        }

        form.submit({
            waitMsg: 'Saving...',       // Wait Message
            method: 'POST',
            params: { 'targetValue' : stringVal , 'targetId' : formTargetId , 'tableName' : targetName },
            url: 'app/model/target/GG/add-update_svc.php',
            success: function (form, action) { // When saving data success
                Ext.Msg.alert('Success', action.result.message);    

                // clear the form
                form.reset();

                // reload store
                Ext.data.StoreManager.lookup('tvdStore').load(
                    {
                        params: {
                            tableName: formTableName,
                            targetName: targetName,
                            familyName: formFamilyName
                        }
                    }
                );

            },
            failure: function (form, action) {      // when saving data failed
                Ext.MessageBox.alert ('Message','Saving data failed');
            }
        });
    }
}

グリッドにロードされるはずの JSON が FireBug に戻ってきていることがわかります。そのため、ストアはリロードされていますが、loadMask が表示されず、グリッド自体が更新されません。

4

1 に答える 1

1

実際には、更新/削除/挿入手順の後にストア全体をリロードする必要はありません。Store クラスには、サーバーから結果メッセージを受信した後にレコードのローカル コピーを更新するロジックがあります。そのため、サーバーが適切なメッセージを返し、ローカル コピーが更新されていることを確認する必要があります。

また、グリッドは更新されたレコードも自動的に再描画する必要があります。

于 2012-04-19T23:38:41.300 に答える