1

メンバーのリストを表示するグリッドがあります。グリッドには、アイコン付きの Edit というアクション列があります。ユーザーが [編集] アイコンをクリックすると、ウィンドウは [ユーザーの編集] フォームを含む別のページにリダイレクトされます。

ストアとグリッドのコードは次のとおりです。

    var userstore = Ext.create('Ext.data.Store', {
      storeId: 'viewUsersStore',
      model: 'Configs',
      autoLoad: true,
      proxy: {
        type: 'ajax',
        url: '/user/getuserviewdata.castle',
        reader: { type: 'json', root: 'users' },
        listeners: {
        exception: function (proxy, response, operation, eOpts) {
            Ext.MessageBox.alert("Error", "Session has timed-out. Please re-login and 
             try again.");
      }
    }
  }
});

var grid = Ext.create('Ext.grid.Panel', {
    id: 'viewUsersGrid',
    title: 'List of all users',
    store: Ext.data.StoreManager.lookup('viewUsersStore'),
    columns: [
        //{header: 'ID', dataIndex: 'id', hidden: true},
        {header: 'Username', dataIndex: 'username'},
        {header: 'Full Name', dataIndex: 'fullName'},
        {header: 'Company', dataIndex: 'companyName'},
        {header: 'Latest Time Login', dataIndex: 'lastLogin'},
        {header: 'Current Status', dataIndex: 'status'},
        {header: 'Edit', 
         menuDisabled: true, 
         sortable: false, 
         xtype: 'actioncolumn', 
         width: 50, 
         items: [{ 
            icon: '../../../Content/ext/img/icons/fam/user_edit.png', 
            handler: function (grid, rowIndex, colIndex){
                var rec = userstore.getAt(rowIndex); 
                alert("Edit " + rec.get('username')+ "?");  
                EditUser(rec.get('id')); 
                } 
             }] 
        }
    ]

});

function EditUser(id) {

    window.location = "/user/index.castle";

}

ユーザーが編集アイコンをクリックすると、関数 EditUser(id) が呼び出されます。その関数では、window.location はユーザーをユーザーの編集フォームにリダイレクトします (これが URL の略です)。

今私の問題は次のとおりです:データベースからメンバーデータをユーザーの編集フォームにロードする方法は?

つまり、ユーザーが [編集] アイコンをクリックすると、[ユーザーの編集] フォーム/ウィンドウにリダイレクトされ、データベースからメンバー データ (つまり、ユーザー名、フルネームなど) が (自動的に) 読み込まれます (各メンバーには一意の ID があります)。

私はphpを使用していませんが、Ext JSとCastle Monorail (MVC)を使用しています。loadRecord(rec) を使用してみましたが、うまくいきましたが、問題は、グリッド レコードに [ユーザーの編集] フォームで発生するすべてのデータ フィールドが含まれていないため、レコードではなくデータベースからデータをロードする必要があることです。

たとえば、[ユーザーの編集] フォームには、グリッドで除外されている [アクセス許可] というチェックボックス グループがあります。

また、編集したメンバー データをデータベースに保存し直す必要があります。

これをどうやって進めるかについてのヒントはありますか?

4

1 に答える 1

1
  1. なぜextjsでマルチページアプリを作っているのですか? シングルページアプリではありませんか?利点は何ですか?

  2. ユーザーのIDが必要です。それはグリッドから渡されます。次に、Model.load() を使用して、そのユーザーをデータベースからモデルにロードします。form.loadRecord() を使用してモデルをフォームにロードすると、フォーム フィールドの名前に基づいて自動的に入力されます。

モデルをロードしてフォームにロードするには、次のようにします。

Model.load(1, {
  callback: function(record){
    form.loadRecord(record); //any matching form names will get loaded into form
  }
});

三。奇妙な名前の「configs」モデルをフォームに使用する必要があります。プロキシをストアからモデルに移動する必要があります。ストアはそのモデル プロキシを継承します。

プロキシをストアからモデルに移動するには、コードでプロキシを削除し、「proxy」プロパティをモデルに追加します。店舗でもモデルでも同じです。

于 2012-07-20T19:18:54.603 に答える