【问题标题】:Make datatables search the column.render value instead of value returned from server使数据表搜索 column.render 值而不是从服务器返回的值
【发布时间】:2015-06-02 08:00:11
【问题描述】:

我在数据表上使用服务器端处理,返回的值之一是 01 不希望数据表搜索或过滤这些,所以我在数据表中执行此操作。

  {"data":"Cycle.type", "targets":3, "render": function (data,type,full,meta) {
           return data == '0' ?'<td> Planning</td>' : '<td>Realization</td>';
   }}

似乎数据表仍在搜索服务器端返回的值,但我希望它搜索上面渲染函数返回的值。有一些 html,但我主要对 Html 标记中的值感兴趣。我怎样才能做到这一点?

【问题讨论】:

  • 为什么不使用bSortable: falsebSearchable: false 禁用对该特定列的排序/搜索?
  • @Beginner 我已经稍微编辑了这个问题。也许它会更有意义。排序工作正常,但搜索仍然使用服务器端返回的值。
  • 所以禁用对该列的搜索。
  • @Beginner 这不是我想要实现的。我仍然希望他的列是可搜索的,但我希望呈现的值不是服务器端返回的值
  • 但是搜索也将是服务器端的。那你为什么不修改你的服务器端函数呢?

标签: jquery datatables jquery-datatables datatables-1.10


【解决方案1】:

由于您使用的是服务器端处理,因此搜索和排序也必须在服务器端完成。

如果您使用的是 PHP,则可以使用 ssp.class.phpdownload DataTables library 时可用。

使用ssp.class.php,您可以使用以下技巧与子查询来使数字字段可搜索。下图只是一个简单的例子。

<?php

$table = <<<EOT
 (
    SELECT 
       field1, 
       field2, 
       (CASE WHEN type=0 THEN 'Planning' ELSE 'Realization' END) AS type
    FROM table
 ) temp
EOT;

$primaryKey = 'id';

$columns = array(
    array( 'db' => 'field1',  'dt' => 'field1' ),
    array( 'db' => 'field2',  'dt' => 'field2' ),
    array( 'db' => 'type',    'dt' => 'type' )
);

// SQL server connection information
$sql_details = array(
    'user' => '',
    'pass' => '',
    'db'   => '',
    'host' => ''
);

require( 'ssp.class.php' );

echo json_encode(
    SSP::simple( $_GET, $sql_details, $table, $primaryKey, $columns )
);
?>

要使用该技巧,您还需要编辑 ssp.class.php 并将所有 FROM `$table` 实例替换为 FROM $table 以删除反引号。

【讨论】:

  • 这是一个不错的解决方案,但毕竟自定义过滤器不是更好吗?我认为,如果客户端发生变化 - 您也必须更正服务器端。但是+1。
  • @davidkonrad,你能解释一下自定义过滤器的意思吗,this example,也许?如果是,我认为服务器端处理不可能。我错过了更优雅的解决方案吗?
  • this 之类的东西我可以给出答案,但我相信 Gyrocode :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-06
  • 1970-01-01
  • 2015-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-20
相关资源
最近更新 更多