首先根据https://www.jfinal.com/share/1991
新建类 MyRenderDirective
新建index.html
#myRender(layoutPath)
#@layout()
#define content()
显示#(layoutPath)
#end
新建layout.html
#define layout()
i am <span style="color:red">layout.html</span>
<br>
<br>
#@content()
#end
新建layout1.htm
#define layout()
i am <span style="color:blue">layout1.html</span>
<br>
<br>
#@content()
#end
新建layout2.htm
#define layout()
i am <span style="color:red">layout2.html</span>
<br>
<br>
#@content()
#end
GUI:
import com.jfinal.kit.Kv
import com.jfinal.kit.StrKit
import com.jfinal.template.Engine
import javafx.scene.web.WebEngine
import tornadofx.*
import java.util.*
class MainView : View("像#render指令一样可以动态参数又支持调用子模板中的函数") {
lateinit var webEngine: WebEngine
val kv = Kv.create()
val str = stringProperty()
override val root = borderpane {
center = vbox(5) {
webview {
webEngine = engine
}
}
top = hbox(10) {
button("render layout.html") {
action {
loadtmp("layout","index")
}
}
button("render layout1.html") {
action {
loadtmp("layout1","index")
}
}
button("render layout2.html") {
action {
loadtmp("layout2","index")
}
}
button("case1 layout1") {
action {
loadtmp("case1Layout1","case1Index")
}
}
button("case1 layout2") {
action {
loadtmp("case1Layout2","case1Index")
}
}
}
left {}
bottom {}
setPrefSize(1000.0, 500.0)
paddingAll = 10.0
style {
fontSize = 16.px
}
}
private fun loadtmp(layout:String,index:String){
kv.put("layoutPath", resources.url("/${layout}.html").file)
str.value = engine.getTemplateByString(resources.text("/${index}.html")).renderToString(kv)
webEngine.loadContent(str.value)
}
init {
// 添加处定义指令
engine.addDirective("myRender", MyRenderDirective().javaClass)
}
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。