我需要模拟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();
}
}
生成select2数据的PHP:
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;
答案 0 :(得分:1)
根据控制台中显示的内容,您似乎没有正确设置<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
中的最后一组括号,以确定名称和状态。