请问,Jfinal的模板里面是否可以直接调用当前controller的方法?

Jfinal的模板里面是否可以直接调用当前controller的方法?由于I18n依赖当前浏览环境,将I18n接口直接封装到了BaseController里了,在controller里面使用很方便,现在发现模板里面好像没办法直接使用?

评论区

JFinal

2017-05-22 18:01

setAttr("action", this);
然后 #(action.method(...));

JFinal

2017-05-22 18:01

不建议这么用

cleverbug

2017-05-22 18:08

@JFinal setAttr知道可以,我是想着是不是已经有内部的方案可以直接用了,当前模板调用当前controller的方法应该也算合理,只是也有可能会调用到Action就不合理了

cleverbug

2017-05-22 18:30

@JFinal 如果不这样,我琢磨了好久,好像这个I18n放在Controller里最合适了,放其他地方都好像有点别扭,它要获取当前浏览环境,放Controller里面也用的很顺,直接弄了个叫L的方法,L(xxxxx)就好,如果模板里面也可以直接这样就很方便,另外如果Controller可以指定某个方法原生的在模板里直接就能调用,那就爽了,要扩展模板功能轻轻松松,当然你现在的扩展方式也很轻松,只是Controller里面加个方法来的更轻松,哈哈

cleverbug

2017-05-22 18:32

@JFinal 是否可以在controller里面做个方法指定导出哪些方法到模板中,这样模板里面就直接可以用这些方法。

JFinal

2017-05-22 19:55

@cleverbug 用一下 I18nInterceptor,在模板中直接就可以使用了,看一下手册中有关 i18n 那一章

我记得在添加 I18nInterceptor 以后,在页面中直接用:
#(_res.get(key))
#(_res.format(str, p1, p2..., pn))

cleverbug

2017-05-22 21:20

@JFinal 非常感谢,经测试拦截器在模板可以用,不过我还是保留了我controller里面的,方便controller里面使用。

JFinal

2017-05-23 10:36

@cleverbug 你还可以通过扩令扩展来实现这个功能,用起来会更方便,例如这样用:
#i18n(key)

热门反馈

扫码入社