0

2 つのグリッドがあります。私はそれらを子グリッドと親グリッドと呼んでいます。親グリッドに新しい行 (データ) を追加するときに、親グリッドをリロードします。コードで afteredit 関数を使用して編集しようとしていました。アラートの 2 行目のコメントを外すと、問題なく動作します。ただし、アラートがないと、新しく追加された行は非表示になります。私のコードで何が問題なのかわかりません。新しい行をグリッドに追加した後、グリッドをすぐにリロードする方法を教えてください。

これは私のアフターエディット機能です

   afteredit : function (roweditor, changes, record, rowIndex) 
   { //alert('alert me');
      if (!roweditor.initialized) {
         roweditor.initFields();
      }
      var fields = roweditor.items.items;
      // Disable key fields if its not a new row
      Ext.each(fields, function (field, i) {
         field.setReadOnly(false);
         field.removeClass('x-item-disabled');
      });

        this.grid.getSelectionModel().selectRow(0);
        this.grid.getView().refresh();
   },


xt.ux.grid.woerp = 
{
   configRowEditor: 
   {
      saveText: "Save",
      cancelText: "Cancel",
      commitChangesText: WOERP.constants.gridCommitChanges,
      errorText: 'Errors',
      listeners: 
      {
         beforeedit: WOERP.grid.handler.beforeedit,
         validateedit: WOERP.grid.handler.validateedit,
         canceledit: WOERP.grid.handler.canceledit,
         afteredit: WOERP.grid.handler.afteredit,
         aftershow: WOERP.grid.handler.aftershow,
         move: WOERP.grid.handler.resize,
         hide: function (p) 
         {
            var mainBody = this.grid.getView().mainBody;
            if (typeof mainBody != 'undefined') 
            {
               var lastRow = Ext.fly(this.grid.getView().getRow(this.grid.getStore().getCount() - 1));
               if (lastRow != null) 
               {
                  mainBody.setHeight(lastRow.getBottom() - mainBody.getTop(), 
                  {
                     callback: function () 
                     {
                        mainBody.setHeight('auto');
                     }
                  });
               }
            }
         },
         afterlayout: WOERP.grid.handler.resize
     }
   },
4

3 に答える 3

1

AFAIKは、ストアからの基になるデータを変更するRowEditorためのプラグインです。GridPanel通常、更新はストアによっても行われます。データがいつ保存されたか知りたい場合は、ストアにイベント ハンドラーをアタッチする必要があります。例:

grid.getStore().on('save', function(){ [...] });
于 2012-11-28T11:39:05.857 に答える
1

最後に解決策を見つけました。afteredit メソッドにリロード機能を追加すると、新しく追加された行が非表示になります。したがって、グリッドのリロードは、データをそのデータ グリッド ストアにコミットした後、うまく機能します。とにかく、助けようとするすべての人々に感謝します

この私のコードは次のようになります

record.commit();
grid.getView().refresh();
于 2012-11-29T10:21:14.167 に答える
0

グリッドを編集した後に保存ボタンがあると思います。したがって、handler保存中でイベントをキャッチできます

または使用して

Ext.getCmp('your_saveButtonId').on('click', function(component, e) {
   // Here they will be checking for modified records and sending them to backend to save.
   // So here also you can catch save event
}
于 2012-11-28T15:49:28.590 に答える