希望使用jQuery Bootgrid创建条件格式化程序/行操作。例如,如果设置了PHP数据中的某个值,则显示格式化程序,否则不显示。我无法找到解决此问题的任何文档或以前的stackoverflow问题。
修改
我目前在我的控制器中执行此操作的方式如下:
$actions = array(
'override' => array(
'icon' => 'flare red',
'link' => '/edit',
'perm' => 'Edit',
'title' => '...',
'condition_and' => array(
'status' => array(
'column' => 'status !=',
'value' => 'Suspended'
),
'registered' => array(
'column' => 'reg ==',
'value' => 'Yes'
)
),
'disabled_icon' => 'flare grey',
'disabled_title' => '...'
)
);
在我生成网格的函数中,我在循环数据时解释这些设置。在我看来,唯一仍然是hacky的部分是我使用PHP循环数据,然后构建一个JS字符串来匹配条件:
if (!empty($vv['condition_and']))
{
$check_cond = '+(';
foreach ($vv['condition_and'] as $conk => $conv)
{
$check_cond .= '(row.' . $conv['column'] . ' ' . $conv['operator'] . ' "' . $conv['value'] . '") && ';
}
$check_cond = rtrim($check_cond, ' && ');
$out .= '"\
"' . $check_cond . ' ? "\
<a style=\"margin-right: 8px\" href=\"' . base_url() . $vv['link'] . '/" + row.id + "\"><i title=\"' . $vv['title'] . '\" class=\"zmdi zmdi-hc-lg zmdi-' . $vv['icon'] . '\"></i></a>" : "\
<i style=\"margin-right: 8px;\" title=\"' . $vv['disabled_title'] . '\" class=\"zmdi zmdi-hc-lg zmdi-' . $vv['disabled_icon'] . '\"></i>")+"\
" + ';
}
但如果没有明确的方法可以做到这一点,我现在就会坚持下去。
答案 0 :(得分:1)
您可以使用json数据中的属性在自己的格式化程序函数中进行检查:
$("#grid-data").bootgrid({
ajax: true,
url: "/api/get-data",
formatters: {
"paymentButton": function(column, row)
{
if (row.HasPayment)
return '<button class="btn btn-primary" data-id="' + row.PaymentId + '" title="Check payment details"><i class="fa fa-money"></i></button>';
return "";
}
}
});
在这种情况下,使用该paymentButton
格式程序的列将仅针对HasPayment
属性为true的行显示一个按钮,否则显示为{false}的任何内容。
您可以从后端PHP API返回所需的任何数据,并在formatter函数中检查它们。
无论加载数据的方式如何,都会调用formatter函数。