form.js
function formatRepo (repo) {
if (repo.loading) return repo.text;
var markup = [
'<li class="select2-result_option" role="treeitem" id="repo.id">',
repo.text,
'</li>'
].join('');
return markup;
}
// select2 ajax 加载数据
$('.select-ajax').each(function(index, el) {
var $this = $(this);
$this.select2({
width: "100%", //设置下拉框的宽度
ajax: {
a:$(this),
b:this,
c:self,
url: $this.data('url'),
dataType: 'json',
delay: 250,
data: function (params) {
return {
q: params.term, // search term
page: params.page
};
},
processResults: function (data, params) {
// parse the results into the format expected by Select2
// since we are using custom formatting functions we do not need to
// alter the remote JSON data, except to indicate that infinite
// scrolling can be used
params.page = params.page || 1;
return {
results: data.data,
pagination: {
more: (params.page * 10) < data.total
}
};
},
cache: false
},
escapeMarkup: function (markup) { return markup; }, // let our custom formatter work
minimumInputLength: 1,
templateResult: formatRepo, // omitted for brevity, see the source of this page
});
builder
~~~
/**
* 添加普通联动表单项
* @param string $name 表单项名
* @param string $title 表单项标题
* @param string $tips 表单项提示说明
* @param array $options 表单项options
* @param string $default 默认值
* @param string $ajax_url 数据异步请求地址
* 可以用Url方法生成,返回数据格式必须如下:
* $arr['code'] = '1'; //判断状态
* $arr['msg'] = '请求成功'; //回传信息
* $arr['list'] = [
* ['key' => 'gz', 'value' => '广州'],
* ['key' => 'sz', 'value' => '深圳'],
* ]; //数据
* return json($arr);
* status用于判断是否请求成功,list将作为$next_items第一个表单名的下拉框的内容
* @param string $next_items 下一级下拉框的表单名
* 如果有多个关联关系,必须一同写上,用逗号隔开,
* 比如学院作为联动的一个下拉框,它的下级是专业,那么这里就写上专业下拉框的表单名,如:'zy'
* 如果还有班级,那么切换学院的时候,专业和班级应该是一同关联的
* 所以就必须写上专业和班级的下拉框表单名,如:'zy,bj'
* @param string $param 指定请求参数的key名称,默认为$name的值
* 比如$param为“key”
* 那么请求数据的时候会发送参数key=某个下拉框选项值
* @author 蔡伟明 <314013107@qq.com>
* @return mixed
*/
public function addSelectAjax($name = '', $title = '', $tips = '', $options = [], $default = '', $extra_attr, $ajax_url, $param = '')
{
$item = [
'type' => 'select2ajax',
'name' => $name,
'title' => $title,
'tips' => $tips,
'value' => $default,
'options' => $options,
'ajax_url' => $ajax_url,
'param' => $param == '' ? $name : $param,
];
if ($this->_is_group) {
return $item;
}
$this->_vars['search_form_items'][] = $item;
return $this;
}
~~~