1

Dojoバージョンは1.7.2です

MemoryStoreからのデータで満たされたDataGridがあります。正常に動作しますが、ストアでオブジェクトが更新されてもグリッド内のデータは更新されません。

これは、グリッドとストアの接続方法です。

formStore = Observable(new MemStore());
formGrid = new DataGrid( {
   store:ObjectStore( {objectStore:formStore} ),
   query:{id:"*"},
   structure:[
      { name:" ", field:"pending", width:"2em",
         formatter:function ( count, rowIdx, cell ) {
            return '<div style="font-size: smaller; text-align: right;">' + count + '</div>';
         }
      },
      { name:" ", field:"name", width:"auto",
         formatter:function ( formName, rowIdx, cell ) {
            return '<div style="white-space: nowrap;">' + formName + '</div>';
         }
      }
   ]

}, "formGrid" );

ストア内のデータを更新する関数があります。

function updateForms() {
   require( ["dojo/_base/xhr", "dojo/_base/array", "dojox/grid/DataSelection"],
               function ( xhr, array, DataSelection ) {
                  xhr.get( {
                     url:"services/jsonrest/form/",
                     content:{ id:"all" },
                     handleAs:"json",
                     load:function ( forms, io ) {
                        array.forEach( forms, function( form, idx ) {
                           formStore.notify(form, form.id);
                        });
                     }
                  } );
               } );
}

この関数の実行時にストアが空の場合、アイテムはに表示されますDataGridが、アイテムがグリッドに入ると更新されません。これはテストシステムであり、Formオブジェクトの一部は呼び出しごとに変更されます。

私がやったことは、サーバー上のメソッドを変更して常にすべてのアイテムを返すようにすることです。そうすると、javascript関数は次のようになります。

function updateForms() {
   require( ["dojo/_base/xhr", "dojo/_base/array", "dojox/grid/DataSelection"],
               function ( xhr, array, DataSelection ) {
                  xhr.get( {
                     url:"services/jsonrest/form/",
                     content:{ id:"all" },
                     handleAs:"json",
                     load:function ( forms, io ) {
                        // reset all the items in the DataGrid
                        formGrid.setItems( forms );
                     }
                  } );
               } );
}

これも機能します。選択は保持され、DataGridはちらつきません。しかし、それは一種の目的を打ち負かします。

この記事を見つけましたが、理解できませんでした。私はたくさんのことを試しましたが、何もうまくいきませんでした。この記事dojo.connectでは、新しいの代わりに古い構文が使用されていますdojo.on

どこかに細部が欠けていると確信しています。

ご協力ありがとうございました。

4

1 に答える 1

0

Dojo の最新バージョンでは、DataGridのpublicメソッドが削除されました。 を使用して、プライベート メンバーrefresh()にアクセスできます。formGrid._refresh()

なんらかの理由で公開機能を削除したに違いなく、これは OOPS の哲学に反することに注意してください。

一般的なアドバイスとして、他の解決策が見つからない状況ではformGrid.、firebug のコンソールの単一行モードに入力してみてください。を入力する.と、問題のオブジェクトのすべてのメンバーとプロパティのリストが表示されます。これには、すべてのパブリックなもの (通常は先頭に _ がありません) とすべてのプライベートなもの (通常は先頭に _ があります) が含まれます。

firebug で動作しない場合は、Chrome の優れたコンソールを試してください。

于 2012-05-10T04:55:11.887 に答える