JFinal模板是否可以考虑全局模板函数支持

解释下标题的意思

使用#define xxx()定义的模板函数不仅可以在父模板中调用,也可以在父模板外的模板调用(全局调用)

使用场景

拿JFinal文档中“6.4.7 模板函数调用”来说

layout()模板函数中调用了#@main()、#@js?(),该模板文件定为A,另一个模板文件B在使用模板A中的layout()时并未定义js(),而在模板B的子模板C中定义了js(),此时希望模板C中申明的模板函数js(),可以被模板A调用到,使该js在所有公共js加载完成后执行

实现方式

可以考虑添加关键字,如#define global xxx(),针对global 模板函数作用域为全局

如果增加了全局函数,需要考虑重复定义的问题,如多个子模板都定义了js(),上面场景中希望全部都可以调用,而不是覆盖,可能后续有其他场景仅需要一个生效

评论区

JFinal

2017-04-07 21:32

这个功能应该天然就支持了,你试用一下

2017-04-08 09:54

可能描述的不清晰,上面的模板C是自定义指令里使用的模板文件,在模板B中使用该指令时,无法调用指令中的js()模板函数,因为指令js仅仅在直接引用模板A的模板下是可以被调用的
不能截图,大致写下三个文件的代码
---------------------------------------------------------------------------------------
A模板文件:
#define layout()



........
#@main()
.......
#@js?()


#end
---------------------------------------------------------------------------------------
B模板文件:
#include("A.html")
#@layout()
.....
#define main()
......

#hotTrade({"titleName":"XXX标题","num":4})

.......
#end
---------------------------------------------------------------------------------------
C模板文件,为自定义指令hotTrade使用的模板文件,大致代码如下:
.......

#define js()

#end

---------------------------------------------------------------------------------------
问题是:在模板A中无法调用指令hotTrade模板中的js()

2017-04-08 09:56

上面回复里的html标签全没了,不能理解的话我再发

绝尘

2017-04-10 08:22

@召 在config中配置共享,如波总所言天然支持全局,{全局:在config中加入,局部,include引入}

热门反馈

扫码入社