2

REST サービス コンポーネントからデータを取得する Dojo グリッド (extlib コンポーネント) をどのようにフィルター処理しますか? REST サービス コンポーネントから、ビューのデータをグリッドに正しくロードしました。また、xpage には、ユーザーが同じビュー内の列の 1 つの dbcolumn である値を選択できるドロップダウンがあります。RESTサービスキーの値をviewScope.filterCat01(コンボボックスの変数)に設定しようとしましたが、ボタンにフィルターを設定しようとしました(BYはフィールド/列名です)が、何もないようですそれをフィルタリングします。何か案は?ボタンでグリッドのプロパティをチェックすると機能するので、グリッド オブジェクトが有効であることはわかっていますが、フィルターは何もしていないようです。また、grid._refresh() を実行しようとしただけでなく、REST サービス コンポーネントでキーを設定してもうまくいきませんでした。

var filterValue = XSP.getElementById("#{id:comboBox2}").value;
var grid = dijit.byId("#{id:djxDataGrid1}");
grid.filter({ By: filterValue});
4

1 に答える 1

1

これは間違いなく、何千もの不可解な手がかりをつなぎ合わせて解決する必要があるものの 1 つです (ドミノ - 決して!)。とにかく、私は昨年これを解決しなければなりませんでした。「検索」ボタンの例を次に示します。

var searchText = dojo.byId('#{id:searchText}').value.replace(/"/g, '|"');
if (searchText) {
  var ftSearchText = '[Title] CONTAINS "' + searchText + '" OR [Description] CONTAINS "' + searchText + '" OR [URL] CONTAINS "' + searchText + '"';
  dijit.byId('#{id:grid}').filter('?search=(' + ftSearchText + ')', false);
} else {
  dojo.byId('#{id:reset}').click();
}

ご覧のとおり、フィルターが適用されると ft 検索が行われます。重要なのは、フィルター文字列の先頭に「?search=」を置くことです。

「リセット」ボタンの例は次のとおりです。

dojo.byId('#{id:searchText}').value="";
var grid = dijit.byId('#{id:grid}');
grid.filter("",true);
grid.store.close();
grid._refresh();

これは 8.5.2 で開発されました。dojo 1.6.1 を使用して 8.5.3 で行うには、よりクリーンな方法がいくつかあるかもしれません。

楽しみ!

于 2012-04-25T15:41:56.213 に答える