不能相应地模板 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 中的最后一组括号,以找出名称和状态。