1

私は次のチュートリアルに従っています:

http://mrhawley.com/

問題はそれが終わらないことです。ただし、ここまでは、sencha cmd を使用して extjs アプリを開発し、CodeIgniter をバックエンド フレームワークとして使用するための最良のチュートリアルです。

私はギャップを埋めて、彼がどこに向かっているのかを推測することにしました. 作成/読み取りおよび更新メソッドはすべてうまく機能していますが、削除を機能させることができないようです。

これが私のextjsストアです:

Ext.define('BugTracker.store.user.UserList', {
extend: 'Ext.data.Store',
requires: [
    'BugTracker.model.user.UserList'
],
constructor: function(cfg) {
    var me = this;
    cfg = cfg || {};
    me.callParent([Ext.apply({
            model: 'BugTracker.model.user.UserList',
            autoLoad: false,
            remoteFilter: false,
            remoteSort: false,
            pageSize: 5,
            sorters: {
                property: 'username',
                direction: 'asc'
            },
            proxy: {
                type: 'rest',
                actionMethods: {
                    create: 'POST',
                    read: 'GET',
                    update: 'POST',
                    destroy: 'POST'
                },
                api: {
                    create: 'index.php/user/new_user',
                    read: 'index.php/user/get_users',
                    update: 'index.php/user/update_user',
                    destroy: 'index.php/user/delete_user'
                },
                reader: {
                    type: 'json',
                    root: 'data'
                },
                writer: {
                    type: 'json',
                    writeAllFields: false,
                    allowSingle: false,
                    encode: true,
                    root: 'data'
                }
            }
        }, cfg)]);
}
});

ここに私のextjsコントローラーがあります:

Ext.define('BugTracker.controller.user.UserAdmin', {
extend: 'Ext.app.Controller',
refs: [
    {
        ref:'userForm',
        selector:'userform'
    }
],
init: function(){
    this.control({
        'maintoolbar button[action=openUserAdminPanel]':{
            click:function(){
                var panel =  Ext.widget('useradminpanel');
                panel.show();
            }
        },
        'userform button[action=saveUser]':{
            click:function(button){
                var form = button.up('form').getForm(),
                    values = form.getValues(),
                    store = Ext.getStore('user.UserList');

                if (form.isValid()) {
                    switch (button.getText()){
                        case 'Save':
                            store.create(values);
                            break;
                        case 'Update':
                            var record = form.getRecord();
                            record.set(values);
                            store.update();
                            button.setText('Save');
                    }
                    this.LoadUserList();
                    this.ResetForm(form);
                }
            }
        },
        'userform button[action=deleteUser]':{
            click:function(button){
                var form = button.up('form').getForm(),
                    values = form.getValues(),
                    store = Ext.getStore('user.UserList');
                if (form.isValid()) {
                    Ext.MessageBox.confirm('Delete',
                        'Are you sure you want to delete user "' + values.username + '"?',
                        function(button){
                            switch (button) {
                                case 'yes':
                                    store.destroy(values.id);
                                    break;
                                default:
                                    break;
                            }
                        });
                    this.LoadUserList();
                }
                this.ResetForm(form);
            }
        },
        'userlist':{
            afterrender:this.LoadUserList,

            cellclick:function(grid,td,cellIndex,record,tr,rowIndex,e,eOpts){
                var form = this.getUserForm(),
                    button = form.down('button[action=saveUser]');
                form.loadRecord(record);
                button.setText('Update');
            }
        }
    });
},
ResetForm:function(form){
    form._record = null;
    form.reset();
},
LoadUserList:function(){
    var store = Ext.getStore('user.UserList');
    store.removeAll();
    store.load();
}
});

ご覧のとおり、削除ボタンをクリックすると store.destroy が呼び出され、index.php/users/delete_user に POST 呼び出しが送信されます。ただし、空の配列を送信しています。values.id をダンプしたところ、正しい ID が表示されました。配列全体を送信しようとしました。私が何をしても、空の配列が送信されます。

4

1 に答える 1

0

そのため、バックエンドで「データ」キーをダンプして、何が送信されているかを判断していました。これは空の配列を考え出していました。store.destroy(values)ただし、 「id」を呼び出したときに送信されたが、データキーの一部ではないことに気付きました。次に、これを説明する作業に進みましたが、削除は正常に機能します。

私が混乱した理由は、プロキシのリーダーとライターを「データ」のルートを持つように設定したためです。ただし、アイテムの削除はこれらのいずれにも当てはまらないため、そのIDを「データ」ルート内に配置しないと思います。問題のヒントを教えてくれた @stormdrain に感謝します。

于 2013-09-24T20:39:37.840 に答える