9

render()メソッドが作業を終了し、すべての HTML 要素を DOM に追加したときに、何らかのアクションを実行する必要があります。イベントにサブスクライブする方法onRenderEnds(そのようなイベントはありません)? slickgrid コードの外部で独自のイベントを作成し、それをrender()メソッドにアタッチできますか?


いくつかのイベント"onScroll", "onViewportChanged"がありますが、終了する前に発生しrender()ました (場合によっては)。


更新:列のフォーマッタを作成します:

formatter: function(row, cell, value, columnDef, dataContext){
    return "<div class='operationList' data-my='" + myData + "'></div>";            
}

グリッドがレンダリングされたとき (フォーマッタを適用)、すべてを調べて、それらを (属性".operationList" divsに基づいて) 他の構造に変換する必要があります。イベント ハンドラーを含む複雑な構造data-myに置き換える必要があります。".operationList" divs

4

2 に答える 2

9

私自身のコメントに答えるために、次のハックを思いつきました。きれいではないかもしれませんが、うまくいくようです。

render()すぐ下のメソッドに次の行を追加しますrenderRows(rendered);

function render() {
    ...
    renderRows(rendered);
    trigger(self.onRenderCompleted, {}); // fire when rendering is done
    ...
}

パブリック API に新しいイベント ハンドラーを追加します。

"onRenderCompleted":            new Slick.Event(),

コードで新しいイベントにバインドします。

grid.onRenderCompleted.subscribe(function() {
    console.log('onRenderCompleted');
});
于 2011-11-04T09:08:26.333 に答える
4

基本的な答えは DON'T です。あなたが提案しているのは非常に悪い設計であり、SlickGrid のコア原則とアーキテクチャに反します。

多くの冗長な作業を行うことになり、SlickGrid のパフォーマンス上の利点のほとんどが無効になります。グリッドは、スクロール時にその場で行 DOM ノードを作成および削除し、その時点でどちらが最適であるかに応じて、同期または非同期で実行します。セルに豊富なインタラクティブ コンテンツが必要な場合は、カスタム セル レンダラーを使用し、onClick などの提供されたイベントを使用して、すべてのイベント処理をグリッド レベルに委譲します。レンダラーを使用してセルのコンテンツを絶対に作成できない場合は、非同期ポストレンダリングを使用してください - http://mleibman.github.com/SlickGrid/examples/example10-async-post-render.html。それでも、グリッド コンテンツには、DOM ノードに直接登録されたイベント リスナーが含まれていてはなりません。

@magiconair のコメントに対処するには、セルが編集モードに切り替わるまで、すべてのオプションとイベント ハンドラーを含む SELECT 全体をレンダリングしないでください。

于 2011-11-21T20:27:06.020 に答える