js动态调用#define content(seqno) 怎么调用?

js动态调用#define content(seqno) 怎么调用?

这样调用时

xxx.innerHTML = '#@content(变量值)';

由于模块是HTML的,此处就会有问题(模板内容换行)。

#define content(seqno)

<div>

   这里是模板内容部分,#(seqno)

</div>

#end


评论区

JFinal

2019-05-10 15:34

js 处在前端,而模板引擎的动作全在后端,本质上来说 js 无法与后端模板引擎交互

js 只能是在等待后端模板引擎的数据吐出来以后,对吐出来的数据进行处理

一般有两种用法:
1:js 写在模板文件中,也就是 html 中,例如:
var value = #(value);
alert(value);

以上的 #(value) 在后端模板引擎渲染的时候会替换成一个具体值,例如 123,然后渲染完成的 html 到浏览器以后, js 可以通过 alert(value) 进行输出

2:js 发送 ajax 请求,后端 render 吐出来数据,然后 js 拿到数据后使用数据,例如:
下面的 js 代码是即将要上将的新版本 jfinal.com,ajax 动态获取 document 的 content
function clickDoc(event) {
// console.info(event);
event.preventDefault(); // 取代 return false 防止页面跳转

var menu = event.target.id;
var url = "/doc/ajaxContent/" + menu;
$.ajax(url, {
type: "GET"
, cache: false
, dataType: "html"
, success: function(ret) {
// 替换掉右侧文档内容
$("#ajaxContainer").replaceWith(ret);
}
});
}

下面的代码是后端模板引擎吐出 html 数据:
public void ajaxContent() {
Integer mainMenu = getInt(0);
Integer subMenu = getInt(1);
Document doc = srv.findById(mainMenu, subMenu);
if (doc != null) {
setAttr("doc", doc);
render("_content.html");
} else {
renderError(404);
}
}

而上面 ajaxContent() 中使用的 render("_content.html") 是文档页面除去左侧的 menu 后的所有 html 数据

新版本会在下周一或者周二发布,到时候可以参考一下

这里有必要强调一点,js 与模板引擎的运作有一个先后,模板引擎吐数据总是在前,js 使用数据总是在后,它们永远无法同时交互,只能一前一后