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;
}
~~~