不能相应地模板 select2 插件
can't template select2 plugin accordingly
我需要为 jquery Select2 插件结果设置模板,但我似乎无法识别我的自定义变量。
我的 Select2 配置:
$('.idWorker').select2(
{
templateResult: formatWorker
}
);
我的 formatWorker 函数:
function formatWorker (worker) {
console.log(worker);
var markup = worker.id+'<p>'+
worker.name+'<p>'+
worker.available+'<p>';
return markup;
}
PHP 生成工人数据:
public function get($id = null)
{
if($id != null)
$this->db->where("id = {$id}");
$query = $this->db->get('worker');
if($query->num_rows() >= 1)
{
return $query->result();
}
}
PHP 生成 select2 数据:
public function customSelect2()
{
$array = array();
foreach ($this->get() as $worker)
{
$this->db->select("count(tkal.id) as resultcount from token_allocate tkal
left join worker w on w.id = tkal.idWorker
where tkal.idWorker = {$worker->id}");
$query = $this->db->get()->result()[0];
$available = ($query->resultcount >= 1) ? "this person has been called to attend to {$query->resultcount} tokens" : 'this person is available';
$array[] = array('id' => $worker->id,'name' => $worker->name, 'available' => $available);
}
return $array;
}
这是奇怪的部分,在我的 js 控制台日志中,它为每个工作人员打印以下内容:
Object {selected: false, disabled: false, text: "22", id: "id", title: ""…}
Object {selected: false, disabled: false, text: "Moisés Adriano Lago de Almeida", id: "name", title: ""…}
Object {selected: false, disabled: false, text: "this person is available", id: "available", title: ""…}
为什么它在数据库中为每个对象创建 3 个对象并单独工作?我的意思是,看看我的控制台打印的关于 formatWorker 函数的内容。
和
为什么我不能像这样使用我在 php 中设置的变量?
var markup = worker.id+'<p>'+
worker.name+'<p>'+
worker.available+'<p>';
return markup;
根据控制台中显示的内容,您似乎没有正确设置 <select>
。这可能是因为数组如何转换为 <option>
标记,这似乎不是您所期望的。
您正在创建数组
array(
'id' => $worker->id,
'name' => $worker->name,
'available' => $available
);
似乎正在创建以下一组 <option>
标签。
<option value="id">$worker->id</option>
<option value="name">$worker->name</option>
<option value="available">$available</option>
因此,基于此,应该清楚数组中的每个索引都被转换为 <option>
,这就是为什么您看到每个工作人员的三个选项被记录到控制台。
现在,您显然正在为每个工作人员寻找一个 <option>
,并且您希望 id
稍后在服务器端发回。所以每个工人可能的 <option>
标签可能是
<option value="$worker-id">$worker->name ($available)</option>
PHP.
中的数组很容易做到
$worker_array = array();
$worker_array[$worker->id] = $worker->name . " (" . $available . ")";
$array[] = $worker_array;
并且根据您用于创建 <option>
标签的框架,您可以在它们上附加 data-*
属性,这可以让您有一个看起来像
<option value="$worker->id" data-available="$available">$worker->name</option>
而您的 templateResult
函数只需要看起来像
function formatWorker (obj) {
var available = obj.element ? $(obj.element).data('available') : '';
return obj.id + '<p>' + obj.text + '<p>' + available;
}
否则,您将不得不解析 obj.text
中的最后一组括号,以找出名称和状态。
我需要为 jquery Select2 插件结果设置模板,但我似乎无法识别我的自定义变量。 我的 Select2 配置:
$('.idWorker').select2(
{
templateResult: formatWorker
}
);
我的 formatWorker 函数:
function formatWorker (worker) {
console.log(worker);
var markup = worker.id+'<p>'+
worker.name+'<p>'+
worker.available+'<p>';
return markup;
}
PHP 生成工人数据:
public function get($id = null)
{
if($id != null)
$this->db->where("id = {$id}");
$query = $this->db->get('worker');
if($query->num_rows() >= 1)
{
return $query->result();
}
}
PHP 生成 select2 数据:
public function customSelect2()
{
$array = array();
foreach ($this->get() as $worker)
{
$this->db->select("count(tkal.id) as resultcount from token_allocate tkal
left join worker w on w.id = tkal.idWorker
where tkal.idWorker = {$worker->id}");
$query = $this->db->get()->result()[0];
$available = ($query->resultcount >= 1) ? "this person has been called to attend to {$query->resultcount} tokens" : 'this person is available';
$array[] = array('id' => $worker->id,'name' => $worker->name, 'available' => $available);
}
return $array;
}
这是奇怪的部分,在我的 js 控制台日志中,它为每个工作人员打印以下内容:
Object {selected: false, disabled: false, text: "22", id: "id", title: ""…}
Object {selected: false, disabled: false, text: "Moisés Adriano Lago de Almeida", id: "name", title: ""…}
Object {selected: false, disabled: false, text: "this person is available", id: "available", title: ""…}
为什么它在数据库中为每个对象创建 3 个对象并单独工作?我的意思是,看看我的控制台打印的关于 formatWorker 函数的内容。
和
为什么我不能像这样使用我在 php 中设置的变量?
var markup = worker.id+'<p>'+
worker.name+'<p>'+
worker.available+'<p>';
return markup;
根据控制台中显示的内容,您似乎没有正确设置 <select>
。这可能是因为数组如何转换为 <option>
标记,这似乎不是您所期望的。
您正在创建数组
array(
'id' => $worker->id,
'name' => $worker->name,
'available' => $available
);
似乎正在创建以下一组 <option>
标签。
<option value="id">$worker->id</option>
<option value="name">$worker->name</option>
<option value="available">$available</option>
因此,基于此,应该清楚数组中的每个索引都被转换为 <option>
,这就是为什么您看到每个工作人员的三个选项被记录到控制台。
现在,您显然正在为每个工作人员寻找一个 <option>
,并且您希望 id
稍后在服务器端发回。所以每个工人可能的 <option>
标签可能是
<option value="$worker-id">$worker->name ($available)</option>
PHP.
中的数组很容易做到$worker_array = array();
$worker_array[$worker->id] = $worker->name . " (" . $available . ")";
$array[] = $worker_array;
并且根据您用于创建 <option>
标签的框架,您可以在它们上附加 data-*
属性,这可以让您有一个看起来像
<option value="$worker->id" data-available="$available">$worker->name</option>
而您的 templateResult
函数只需要看起来像
function formatWorker (obj) {
var available = obj.element ? $(obj.element).data('available') : '';
return obj.id + '<p>' + obj.text + '<p>' + available;
}
否则,您将不得不解析 obj.text
中的最后一组括号,以找出名称和状态。