通常は統合されて 99% で使用できる SlickGrid フィルターの独自のフィルター処理機能を実行したいと考えています。Slickgrid で見逃したもの - column で使用されるデータの種類は? すでに存在しているかもしれませんが、ソースを確認した後、見つかりませんでした。もしそれが存在するなら - あなたが私を本当の道に導いてくれれば、私は感謝します. Slick.Editors タイプ ? しかし、列が編集用ではない場合は? ...
SlickGrid のサンプルでは、通常、データ型を許可しないフィルターを使用します。具体的なフィールド Id を持ついくつかの例のみが存在します。通常、データは文字、日付、ブール値、数値です。nums 型の場合、<,> およびその他の数値オペランド記号を使用してフィルターを改善したいのですが、日付型でも同じことができます。現時点では、フィールド ID でのみこれを行うことができます。fieldIds とタイプを使用して独自のグローバル配列を指示し、そこから列のタイプを認識することができます。しかし、この解決策は明確ではありません - grid から列の種類を検出する方が良いでしょう。
助けとアイデアを前もって感謝します!
追加した :
いくつかの検索が見つかった後、SlickGrid のデータ値の型を操作できることがわかりました。私はJavascriptの初心者なので、以下のソースを改善するための助けと提案は大歓迎です... :-)
これが私のソースです:
function filter( item )
{
for ( var columnId in colFilt )
{
if ( columnId !== undefined && colFilt[ columnId ] !== "" )
{
var c = grid.getColumns()[ grid.getColumnIndex( columnId ) ];
var typ = varType( item[ c.field ] );
if ( typ == "N" || typ == "D" )
{
var arr = date_num_filter( colFilt[ columnId ] )
if ( arr.length > 0 )
{
if ( arr.length == 2 )
{
switch ( arr[ 0 ] )
{
case "<" :
if ( item[ c.field ] >= arr[ 1 ] )
return false;
break;
case ">" :
if ( item[ c.field ] <= arr[ 1 ] )
return false;
break;
case "<=" :
if ( item[ c.field ] > arr[ 1 ] )
return false;
break;
case ">=" :
if ( item[ c.field ] < arr[ 1 ] )
return false;
break;
default :
return false;
}
}
else
{
if ( item[ c.field ] < arr[ 1 ] || item[ c.field ] > arr[ 3 ] )
return false;
}
}
else
{
if ( item[ c.field ] != colFilt[ columnId ] )
return false;
}
}
if ( typ == "C" ) // item[ c.field ].substring
{
if ( item[ c.field ].toLowerCase().indexOf( colFilt[ columnId ] ) == -1 ) // item[ c.field ] != colFilt[ columnId ] &&
return false;
}
}
}
return true;
}
function varType( o )
{
if ( o.toFixed )
return "N";
if ( o.substring )
return "C";
if ( o.getMonth )
return "D";
if ( o == true || o == false )
return "L";
return "U";
}
function date_num_filter( cVal )
{
var ret_arr = [];
var p = -1;
var n1,n2,n3
if ( cVal.length == 0 )
return ret_arr;
n1 = cVal.indexOf( ".." );
n2 = cVal.indexOf( "<" );
n3 = cVal.indexOf( ">" );
if ( n1 >= 0 || n2 >= 0 || n3 >= 0 )
{
p = cVal.indexOf( ".." );
if ( p >= 0 && cVal.length > 2 )
{
if ( p == 0 || p == cVal.length - 2 )
{
ret_arr[ 0 ] = ( p == 0 ? "<=" : ">=" );
ret_arr[ 1 ] = ( p == 0 ? cVal.substr( 2 ) : cVal.substr( 0, p ) );
}
else
{
ret_arr[ 0 ] = ">=";
ret_arr[ 1 ] = cVal.substr( 0, p );
ret_arr[ 2 ] = "<=";
ret_arr[ 3 ] = cVal.substr( p + 2 );
}
return ret_arr;
}
n1 = cVal.indexOf( "<=" );
n2 = cVal.indexOf( ">=" );
if ( n1 == 0 || n2 == 0 )
{
if ( cVal.length > 2 );
{
ret_arr[ 0 ] = cVal.substr( 0, 2 );
ret_arr[ 1 ] = cVal.substr( 2 );
return ret_arr;
}
}
n1 = cVal.indexOf( "<" );
n2 = cVal.indexOf( ">" );
if ( n1 == 0 || n2 == 0 )
{
if ( cVal.length > 1 );
{
ret_arr[ 0 ] = cVal.substr( 0, 1 );
ret_arr[ 1 ] = cVal.substr( 1 );
return ret_arr;
}
}
}
return ret_arr;
}
前もって感謝します !