SelectPage动态下拉
转自:https://doc.fastadmin.net/doc/178.html
动态下拉(SelectPage)
FastAdmin中的动态下拉列表使用的是优秀强大的Selectpage
插件来支持,FastAdmin对其进行了二次开发。
常规用法
下面介绍一个最基础的动态下拉列表示例,如下
<input id="c-name" data-rule="required" data-source="category/selectpage" class="form-control selectpage" name="row[name]" type="text" value="">
其中需要给元素class添加一个selectpage
,其次需要增加一个data-source="category/selectpage"
这个属性,category/selectpage
为我们控制器提交列表的方法
FastAdmin的Selectpage
列表中显示字段
默认读取的是name
字段,如果我们返回的列表中不包含name
字段,将无法展现下拉列表数据。此时我们需要添加使用data-field="你要显示的字段"
即可,例如data-field="title"
。
FastAdmin的Selectpage
列表中主键字段
默认读取的是id
字段,如果我们的主键不是id
字段,则我们可以添加并使用data-primary-key="你的主键ID字段"
来修改,例如data-primary-key="productid"
。
常用属性
Selectpage
所支持的扩展属性
属性 | 功能 | 示例 |
---|---|---|
data-source | 提供数据源的URL地址或JSON数据 | data-source="category/index" |
data-field | 列表显示读取的字段 | data-field="username" |
data-primary-key | 列表选中后渲染的字段 | data-primary-key="uid" |
data-pagination | 是否开启分页 | data-pagination="true" |
data-page-size | 分页大小 | data-page-size="10" |
data-multiple | 是否支持多选 | data-multiple="true" |
data-max-select-limit | 最多可选择数量 | data-max-select-limit="3" |
data-order-by | 排序字段 | data-order-by="id" |
data-params | 自定义扩展参数 | data-params='{"custom[type]":"test"}' |
data-select-only | 是否为只读模式 | data-select-only="true" |
data-format-item | 列表行模板 | data-format-item="{title} - {author}" |
disabled | 禁用SelectPage组件 | disabled |
附加请求参数
如果需要简单的进行搜索筛选过滤,可以使用
//筛选status为normal,type为1的数据
data-params='{"custom[status]":"normal","custom[type]":"1"}'
data-params
支持function
类型,如果需要动态传参(例如联动查询),则可以在JS中将data-params
添加一个function
处理即可,请在表单初始化Form.api.bindevent
之前使用,例如传递动态选择的类型
$("#c-name").data("params", function (obj) {
return {custom: {type: $("#c-type").val()}};
});
自定义行模板
SelectPage
的data-format-item
在1.2.0
之前的版本只支持使用JS赋值function
来实现格式化模板功能,如:
$("#c-category").data("format-item", function(row){
return row.title + " - " + row.author;
});
从FastAdmin1.2.0
版本开始,同时还支持占位符和模板,如:
占位符模式
<input type="text" ... data-format-item="{title} - {author}" />
模板模式
<input type="text" ... data-format-item="#titletpl" />
<script type="text/html" id="titletpl">
<%=title%> - <%=id%>
</script>
温馨提示:
默认由于data-field="name"
只能指定一个显示的字段,如果需要调用显示多个字段值时,必须在控制器指定
protected $selectpageFields = "id,name,title,author";
数据源
data-source
支持Object
和远程URL返回
两种方式,如:
data-source='[{"id":"1","title":"标题1"},{"id":"2","title":"标题2"}]'
和
data-source="category/index"
当使用远程数据源的方式时需要远程返回JSON数据,如:
{
"list":[{"id":4,"username":"FastAdmin","nickname":"极速后台","avatar":"","pid":0},{"id":6,"username":"CRUD","nickname":"一键CRUD","avatar":"","pid":0}],
"total":30
}
其中list
为数据列表,total
为总记录数,总记录数将用于前端显示分页使用。
事件监听
如果你需要对SelectPage
组件值变更以后的事件进行监听,可以直接监听文本框的change
事件即可,如:
$(document).on("change", "#c-title", function(){
//后续操作
});
也可使用
$("#c-title").data("eSelect", function(){
//后续操作
});
来实现,注意以上代码需要放在元素初始化Form.api.bindevent
之前。
常见问题
1、FastAdmin在生成CRUD时会对包含下划线的字段默认生成动态下拉列表,比如user_id
将自动生成data-source="user/index"
,默认读取的是id
和name
字段,如果需要修改,请修改对应参数data-primary-key
和data-field
来重新赋值。
2、如果你在开发时遇到SelectPage
组件在编辑时总是返回第一行或所有行的数据时,请参考以下文档进行检查你的代码:
https://ask.fastadmin.net/article/2399.html
https://ask.fastadmin.net/article/2400.html
更多的使用方法请参考Selectpage官方教程