0

1 つの道場データグリッドを作成しました。すべての列には、フォーマッターが接続されています。グリッドが生成されると、フォーマッタが呼び出されます。ユーザーが任意の行を選択すると、フォーマッタが呼び出され、選択した行の列要素にいくつかの文字列がアタッチされるようにします。

同様のグリッドは次のようなものです:

COLUMN
-------
a

b

c

ユーザーが 2 番目の行を選択すると、グリッドは次のように変わります。

COLUMN
-------
a

b SELECTED

c

現在、私は次のように実装しました:

if(this.grid.selection.selectedIndex !== -1){
  retrun value + "SELECTED";
}else{
 return value;
}

これを行う良い方法を提案できますか?「SELECTED」文字列をグリッド ストアに追加しないでください。

4

1 に答える 1

0

フォーマットされたものは、行のクリック/選択にフックされません。セルの内容 (値) が設定されている場合にのみ実行されます。代わりに、グリッド コンポーネントのイベントである onRowClicked にフォーカスを移動する必要があります。それはこのように動作します:

grid.onRowClick = onRowClickHandler;

次のサンプルのどれが目標に最も近いかはわかりませんが、onRowClickHandler はそのように設定できます。

function onRowClickHandler(evt) {
    var rows = this.selection.getSelected();
    // perform cell rendering here
    dojo.forEach(rows, function(row) {
       // this row is an item though.. you will have row._O as its index
    });
}

また

function onRowClickHandler(e) {
   var cellClicked = this.focus.cell
   cellClicked.formatter();
}

ただし、グリッド コンポーネントのどこにも表示可能なデータへの参照があまりないことに気付く場合があります。次のクエリ セレクターを使用してセル データを検索し、各値でフォーマッターを呼び出して表示された html を更新できます。ただし、値のカスタム設定の「ティアダウン」のために以前の選択をキャプチャする必要があります。

var prevSelectedRows = [];
function onRowClickHandler(evt) {
    var idx = this.selection.selectedIndex,
        rawRow = dojo.query(".dojoxGridRow:nth-child("+(idx+1)+")", this.domNode)[0],
        self = this;

    // perform resetting of viewable values
    dojo.forEach(prevSelectedRows, function(raw) {
      dojo.query('.dojoxGridCell', raw).forEach(function(cellDOM, i) {
        cellDOM.innerHTML = cellDOM.innerHTML.replace("SELECTED", "");
      });

    });
    prevSelectedRows = []; // reset prev selection
    // look into grid.view.content for methods on this
    // perform setting of viewable values (SELECTED)
    dojo.query('.dojoxGridCell', rawRow).forEach(function(cellDOM, i) {
        // this function might be of interest, lets see how it looks in console
        console.log(self.layout.cells[i].formatter);
        cellDOM.innerHTML = cellDOM.innerHTML + "SELECTED"
    });

    prevSelectedRows.push(rawRow);
}
于 2012-05-24T17:33:05.427 に答える