为什么Selectpage下拉列表在编辑时总是返回第一行的值?
有很多小伙伴都遇到过这个问题,那到底为什么会这样呢?是Selectpage的BUG,还是FastAdmin的BUG?其实都不是,这是因为你采用了自定义数据源导致未处理编辑时的数据导致的。我们都知道在FastAdmin中可以给input添加selectpage的class和data-source属性值后就可以使用动态下拉列表,但往往我们会忽略对编辑时的特殊处理。例如:通常情况下我们的数据源data-source="category/selectpage",当我们点击selectpage文本框时,请求的参数为:
Ujybk2LxCnIGSUWLHwecaw==q_word[]: 名称 pageNumber: 1 pageSize: 10 andOr: AND orderBy[0][]: name orderBy[0][]: ASC searchTable: tbl showField: name keyField: id searchField[]: name name: 名称
服务器返回的数据数据如下:
HhWIV8zIFuLE/HPOr/6d0Q=={ "total": 2, "list": [ { "id": "1", "name": "名称1" }, { "id": "2", "name": "名称2" } ] }
我们的list数据是一个二维数组,返回以上数据在添加时使用时没有任何问题的。但是我们在进入编辑页面时,Selectpage会首先向category/selectpage这个链接请求一次当前编辑项所对应的数据。我们通过Chrome的开发者控制台中的Network中可以看到请求的参数是
pxqIAFwF+j0gyiH8Ki7ILA==searchTable: tbl searchKey: id searchValue: 2 orderBy[0][]: name orderBy[0][]: ASC showField: name keyField: id keyValue: 2 searchField[]: name
比我们正常请求多了个keyValue,我们可以在我们的数据源data-source="category/selectpage"中判断下如果存在keyValue值时只返回与keyValue值有关联的数据,例如我们在category/selectpage中加个判断如下:
AlY7cymjJKKdBi8DLPzg9g==if($this->request->request("keyValue")){ return ['total'=>1, 'list'=>[ ['id'=>2, 'name'=>'名称2'] ] ]; }
通过以上判断后我们在编辑时就不会始终显示的是列表中的第一项数据了。同理如果我们启用了data-multiple="true"时,此时我们判断keyValue时应该只返回与之关联的多个数据。
发表评论 取消回复