关于Enjoy与laytpl配合使用的问题。

在前端使用了layui框架时,我们一般用layui的数据表格来渲染列表数据。

同时有部分字段,需要关联业务字典表来获取其中文描述信息,如状态,类别等等。

我想使用laytpl来处理这类字典的显示,如

<script type="text/html" id="titleTpl">
<a href="/detail/{{d.id}}" class="layui-table-link">{{d.orgId}}</a>
</script>

该出的d.orgId对应的是组织编码,我想让他显示为组织名称,所以通过自定义Directive方法定义一个函数,通过组织编码和父级code来获取组织名称,如

#dictionary("pCode",{{d.orgId}})

但是很遗憾的是,layui的数据表格中的这种取值方式并不能被enjot识别,即使使用

#set("orgId",{{d.orgId}})
#dictionary("pCode",orgId)

处理也不行,只要enjoy指令中传入了laytpl的表达式,后台都会报

the value of key map must be identifier,String,Number or Boolean.

但是又不想在列表查询中为显示对应中文名称而过多的去关联业务字典表,比如这样:

image.png

通过别名来获取中文信息,但感觉这种处理方式并不优雅还切降低了数据库查询效率。

不知道各位有没有更好的解决方案,请不吝赐教!

评论区

JFinal

2019-03-18 10:00

#dictionary("pCode",{{d.orgId}})
改成
#dictionary("pCode", "{{d.orgId}}")

弯道加速跑

2019-03-18 15:16

不行的,这个{{d,orgId}}其实是一个变量,如果加了引号,就变成字符串常量了,传到后台解析出来的也就是这个"{{d.orgId}}",没办法匹配中文

也许这就是萌新吧

2019-06-20 15:36

@弯道加速跑 您好 目前我也遇到了这个问题,请问您解决了吗

弯道加速跑

2019-06-21 14:08

@也许这就是萌新吧 没有,这个问题后来和波总详细讨论过了。最后也是有的数据库关联查询,因为思路错误的。enjoy是在服务端工作的,后台页面经过render输出后,enjoy的使命已经完成。所以它无法做在前端的layui的laytpl引擎中进行二次解析了。如果想使用enjoy指令去解析,那只有放弃使用layui的table组件,通过enjoy的for循环来生成表格,这样就可以自由使用自定义指令来显示中文。但是这样的话,就丧失了layui table提供的各种便利了。

woaiyou

2020-10-28 09:27

同遇到问题,尴尬,尝试了半天,没搞定!

弯道加速跑

2020-10-28 10:04

@woaiyou 后端数据库关联查询吧

woaiyou

2020-10-28 10:27

杜福忠

2020-10-28 10:31

#dictionary 是Enjoy后端执行的语法,{{d.orgId}}是laytpl前端浏览器执行的语法,两个东西执行的时空都不一样。咋取值。。。思路错了。
推荐在JF的DB执行查询结果之后,进行 for(x : list)x.set("orgName", DictKit.getName(x.get("orgId"))) 处理,
然后在浏览器laytpl里面使用{{d.orgName}} 这样子取值就很OK

杜福忠

2020-10-28 10:36

DictKit.getName 里面写法和你的#dictionary Directive差不多,kit里面做下 EhCache缓存就很爽了

热门反馈

扫码入社