1

非常に古いDojoフレームワークに基づいて既存のWebアプリケーションを移行および拡張します。

テーブルの宣言型セットアップ:

<table dojoType="FilteringTable" id="dataTable" 
valueField="f_id" multiple="false" alternateRows="true">
  <thead><tr>
    <th field="f_fname">Firstname</th>
    <th field="f_lname">Lastname</th>
  </tr></thead>
</table>

新着

<table dojoType="dojox.grid.DataGrid" id="dataTable">
  <thead><tr>
    <th field="f_fname">Firstname</th>
    <th field="f_lname">Lastname</th>
  </tr></thead>
</table>

テーブルストアの初期化:

var tab = dojo.widget.byId("dataTable");
if(tab){
  tab.store.setData([]);
}

新着

var tab = dijit.byId("dataTable");
if(tab){
  if(!tab.store){
    tab.store = new dojo.store.Memory({data:[]});
  }
  else{
    tab.store.setData([]);
  }
}

データの更新:

古い/新しい

tab.store.setData(result.array);

古いバージョンのテーブルはデータで埋められ、新しいバージョンのテーブルは空のままです。どちらの場合も取得されるデータ配列はまったく同じです。

したがって、古いFilteringTableで使用されているストアと新しいdojoxDataGridで使用されているストアAPIの違いに対処する必要があるのではないかと思います。

私は一般的にデータストアを使用するのが初めてなので、いくつかの重要な部分が欠けている可能性があります。

視覚的には、新しいグリッドは完全に機能しているように見えます。

アップデート

tab.update(); // tab = dojox.grid.DataGrid

視覚的な部分を最新のものにするために何もしません。ストアデータが変更されたときにDataGridを更新する必要はありませんか、それとも手動でのアクションが必要ですか?

実際、DataGridはMemory-Storeの変更にまったく反応しないようです。たぶんここにいくつかの配線が欠けていますか?

アップデート

私は宣言的にメモリストアを使用してグリッドを接続しています。

<div dojoType="dojo.store.Memory" jsId="memStore"></div>
<table dojoType="dojox.grid.DataGrid" id="dataTable" store="memStore">
  <thead><tr>
    <th field="f_fname">Firstname</th>
    <th field="f_lname">Lastname</th>
  </tr></thead>
</table>

私が最初に得るのは、DataGrid.jsの_setStore()で次のようなエラーが発生することです。

this.store.getFeatures is not a function

。DataGridがすべてのストアと互換性があるとは限りませんか?ストアAPIが1.6で標準化されているという印象を受けました。

もしそうなら、javascript配列入力で使用する代替ストアはありますか?(上記のように)

4

1 に答える 1

4

他のフォーラム(ミレニアム)のフレンドリーなポスターが私に答えを提供してくれました:

Dojo 1.6以降、Dojoのストアに新しいアクセススキームがあります。

dojox.grid.DataGridはこれらのストアを直接サポートしていないため、dojo.data.ObjectStoreと呼ばれるラッパークラスがdojo.dataで提供されます。

したがって、メモリストアを機能させるには、次のコマンドで初期化する必要があります。

var tab = dijit.byId("dataTable");
if(tab){
  if(!tab.store || !tab.store.objectStore){
    tab.store = new dojo.data.ObjectStore({
                    objectStore : new dojo.store.Memory({data:[]})
                });
  }
  else{
    tab.store.objectStore.setData([]);
  }
}

更新されました:

tab.store.objectStore.setData(result.array);

ただし、現時点ではまだ少し欠点があります。グリッドはデータを自動的に更新しませんが、列を並べ替えた後にのみ更新します。tab.update()の使用は機能しません。

アップデート

objectStore.put()またはobjectStore.setData()を使用してデータを変更する場合、後でグリッドの_refresh()関数を使用するようになりました。これはプライベート関数ですが、グリッドを更新するためのより良い方法はまだありません。

于 2011-05-04T12:49:07.837 に答える