最近实习公司给的新人练手项目用的layui,layui之前自己也接触过但是也就是用了用table组件,没有用过layer弹层这些东西,所以就了解了一下。
首先遇到的一个问题就是下拉框没有样式,然后加样式需要在数据项或者表格外面套上form标签,然后在layer弹层success的回调函数里面加form.render()进行渲染,弹层外面需要使用form组件(如下)进行包围。然后这个success的回调是先写layero再写index,其它的例如yes回调相反。
layui.use('form',function(){
var form = layui.form; }
然后第二个问题是下拉框数据回显选中,这个问题搞了有3天,想了好多方法,首先是想的拿监听到的对象直接在content里面页面代码里c:if进行判断,相等就选中,但是没有效果,我一直以为可能是el表达式${}不允许通过拼接这种方式比较,但是好像不是这个原因,好像是使用layui这个组件的原因。
这种方式不可行的话,就想到第二种方式,通过监听到的对象拿到属性去后台查出数据返回前台,在前台都通过拿域对象里面的数据就可以比较了,但是做这个的时候遇到了问题,前端使用ajax发的请求,发请求没有问题,但是后端填充到request域中的数据前台页面拿不到,原因是ajax是局部刷新,前台通过${}就取不到值,如果能取到在f12sources中是可以看到的,在network请求中预览可以看到但是他返回给前台就没有数据了,然后想到了可不可以用别的方式发请求呢,于是用了window.location.href="",通过这个也是可以请求后台的,给它拼接上参数就行,但是这种是network看不到请求的,然后后端直接跳回了页面不是弹出修改窗口那个页面,这就难受了,虽然前台可以取到数据了但是对应的不是修改页面,这就难受了,反正也有问题。
所以就找了最后一种方法,因为是使用的layui,那就看下layui有没有提供什么下拉框选中这种方案,查了挺多说的都用不上,没啥意义,然后其中一个是有用的,实现方案是在success回调里面加如下语句,layui中对下拉框做了封装,lay-value对应得是下拉框值,从监听对象拿到属性赋值给lay-value这个属性代表选中的数据,然后通过下拉框的id调siblings点击事件就ok了。
var select = 'dd[lay-value='+data.reverse1+']';
$('#uriskLevel').siblings("div.layui-form-select").find('dl').find(select).click();
然后回显单选框选中的话比较简单,直接在layer弹层success回调里加上$(':radio[name="uaccident"][value='+data.reverse2+']').prop("checked",true);就ok了,不过需要在后面加上form.render()刷新一下,要不单选框没有效果。