论坛首页 Web前端技术论坛

决定在Lite XML中集成编译客户端模板功能

浏览 6881 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-04-09  
zozoh 写道
恩,这个不是关键,但是这个解决方案只能跑在 JSP 容器, 如果你用纯 JS 来作会不会更好。
因为你这个框架要作的事情就是替别人来缓存一组 HTML 字符串,一个不超过 50 行的 JS 文件就能全部搞定,而根本不用任何服务器端的代码才对。



我想你理解错了。我为什么要在服务端做?
因为我需要在模板编译环节做脚本的前端模板的编译,只要一次。

因为如果不这样做,模板的解析放在客户端,每次都要解析一遍,开销算谁的。
仍外,这个貌似50行代码是做不了这个事情的,至少我没有这本事。呵呵
0 请登录后投票
   发表时间:2009-04-09  
你实际上是把HTML模板,变成一个 JS 函数,这个函数返回的是字符串。 每次对这个jsp的请求,你就会编译一遍。

我的想法大概是这样的:
当用户请求你的网页的时候,你根本不输出 <c:client id="userListTemplate "> 这段内容,
如果当用户调用 userListTemplate(userList)  你就向服务器发请求,请求一个叫 userList 的模板,拿下来,存在 window 对象上,下次再叫 userListTemplate(userList)的时候,你就直接返回给它。
就写作这么一小段 JS 就足够了。

至于服务器端,可以用php,asp,ruby,java 随便什么都无所谓。

0 请登录后投票
   发表时间:2009-04-09  
这个比v和f 那俩个好用吗??
0 请登录后投票
   发表时间:2009-04-09   最后修改:2009-04-09
没有能把异常源码行抛出所需的信息么?
我现在也很头疼这个问题。
编译时检查行肯定没问题,可在生产过程出要抛出错误相关行就必须记录住源码行或者按照一定的特征信息重新扫描模版源文件。
其实给出错误区块描述也可以。

呃~~你不是不喜欢xslt么~~我看这个怎么越写越像xslt。

还有一种修饰性模版操作方法,非常直观,侵入性很小。
和这主题关系不是很大,但在写Js时比较常用,可以参考一下。

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
<script type="text/javascript">
    jQuery(document).ready(function(){
        var data = [
            {title:"title_1"},
            {title:"title_2"},
            {title:"title_3"},
            {title:"title_4"},
            {title:"title_5"}
        ];
        var ex = jQuery("._example");
        var el = null;
        for(var i = data.length - 1;i >= 0;i--){
            el = ex.clone();
            el.removeClass("_example");
            el.html((el.html() || "").replace("{$title}",data[i].title));
            ex.after(el);
        }
        ex.remove();
    });
</script>


<ul>
    <li class="myli _example">{$title}</li>
</ul>
0 请登录后投票
   发表时间:2009-04-10  
zozoh 写道
你实际上是把HTML模板,变成一个 JS 函数,这个函数返回的是字符串。 每次对这个jsp的请求,你就会编译一遍。

我的想法大概是这样的:
当用户请求你的网页的时候,你根本不输出 <c:client id="userListTemplate "> 这段内容,
如果当用户调用 userListTemplate(userList)  你就向服务器发请求,请求一个叫 userList 的模板,拿下来,存在 window 对象上,下次再叫 userListTemplate(userList)的时候,你就直接返回给它。
就写作这么一小段 JS 就足够了。

至于服务器端,可以用php,asp,ruby,java 随便什么都无所谓。



恕我直言,你的理解很多是错的。
0 请登录后投票
   发表时间:2009-04-10  
jindw 写道
zozoh 写道
你实际上是把HTML模板,变成一个 JS 函数,这个函数返回的是字符串。 每次对这个jsp的请求,你就会编译一遍。

我的想法大概是这样的:
当用户请求你的网页的时候,你根本不输出 <c:client id="userListTemplate "> 这段内容,
如果当用户调用 userListTemplate(userList)  你就向服务器发请求,请求一个叫 userList 的模板,拿下来,存在 window 对象上,下次再叫 userListTemplate(userList)的时候,你就直接返回给它。
就写作这么一小段 JS 就足够了。

至于服务器端,可以用php,asp,ruby,java 随便什么都无所谓。



恕我直言,你的理解很多是错的。

很多是错的,很多指什么?没有申明这个变量吧?
0 请登录后投票
   发表时间:2009-04-10   最后修改:2009-04-10
其实也就是一些认识上的先入为主的误区。我上面讲的也不清楚,我罗列一下吧:

1.“jsp的请求”,“必须泡在JSP环境下”
这是一个跨平台的模板引擎,就算在Java环境上用,现在也没有支持jsp的tag,和jsp一点关系都扯不上。

2.“每次对这个jsp的请求,你就会编译一遍”
为什么要这么做呢?这个猜测一定事拍屁股想出来的,^_^。

3.“你根本不输出 <c:client id="userListTemplate "> 这段内容”
其实,上面贴出的例子中也完全可以看出来,这里并没有这种内容的输出(可能我理解错了)。

对于有工作经验的人,很容易犯先入为主的错误,我也经常犯类似错误,呵呵。
比如:
一提Java,就是JSP。
一看到xml,名称空间 就会想起jsp taglib。
一想起jsptaglib实现,就会认为他每次都会跑一遍。
一想到模板,他一定在服务端运行。前端XHR请求数据
一想起前端模板,他一定要在前端解析。





avidmouse 写道
jindw 写道
zozoh 写道
你实际上是把HTML模板,变成一个 JS 函数,这个函数返回的是字符串。 每次对这个jsp的请求,你就会编译一遍。

我的想法大概是这样的:
当用户请求你的网页的时候,你根本不输出 <c:client id="userListTemplate "> 这段内容,
如果当用户调用 userListTemplate(userList)  你就向服务器发请求,请求一个叫 userList 的模板,拿下来,存在 window 对象上,下次再叫 userListTemplate(userList)的时候,你就直接返回给它。
就写作这么一小段 JS 就足够了。

至于服务器端,可以用php,asp,ruby,java 随便什么都无所谓。



恕我直言,你的理解很多是错的。

很多是错的,很多指什么?没有申明这个变量吧?

0 请登录后投票
   发表时间:2009-04-10  
引用
其实也就是一些认识上的先入为主的误区。我上面讲的也不清楚,我罗列一下吧:
1.“jsp的请求”,“必须泡在JSP环境下”
这是一个跨平台的模板引擎,就算在Java环境上用,现在也没有支持jsp的tag,和jsp一点关系都扯不上。

咳,是这样的啊,的确理解错了。

引用
2.“每次对这个jsp的请求,你就会编译一遍”
为什么要这么做呢?这个猜测一定事拍屁股想出来的,^_^。

嗯,这个是我说错了。顺嘴就说了,呵呵。

引用

3.“你根本不输出 <c:client id="userListTemplate "> 这段内容”
其实,上面贴出的例子中也完全可以看出来,这里并没有这种内容的输出(可能我理解错了)。

看来你没明白我的意思是说,根本不输出 <c:client id="userListTemplate "> 编译后的 javascript 内容

引用
对于有工作经验的人,很容易犯先入为主的错误,我也经常犯类似错误,呵呵。
比如:
一提Java,就是JSP。

想问问,你的模板解析在什么时候做的呢? 在编译时,还是在运行时?

引用
一看到xml,名称空间 就会想起jsp taglib。

你的 c: 看来是 client 的意思,哈哈,我说怎么和 jstl 重了呢

引用
一想起jsptaglib实现,就会认为他每次都会跑一遍。

taglib 是会和 jsp 代码一起变成 java 代码,在被编译成 class, 这个class 中你 taglib 变成的那段 java 调用每次请求都要走一遍,有什么错吗?

引用
一想到模板,他一定在服务端运行。前端XHR请求数据
一想起前端模板,他一定要在前端解析。

这个我就不好说什么了,呵呵
0 请登录后投票
   发表时间:2009-04-13   最后修改:2009-04-13
这就是沟通的误差,往往必须反复多次才能减少这种误差,呵呵。

zozoh 写道

引用
对于有工作经验的人,很容易犯先入为主的错误,我也经常犯类似错误,呵呵。
比如:
一提Java,就是JSP。

想问问,你的模板解析在什么时候做的呢? 在编译时,还是在运行时?

没错,实在编译时完成的,不过,这个编译过程可以在程序运行中第一次使用的时候编译。
java和js版本现在是自己编译,php版本可以通过java提供的编译服务远程编译,现在可以直接使用 http://litecompiler.appspot.com的编译服务。

zozoh 写道

引用
一看到xml,名称空间 就会想起jsp taglib。

你的 c: 看来是 client 的意思,哈哈,我说怎么和 jstl 重了呢

还是错了,c:不是 client的意思,我之所以取名c 确实是受jstl影响,不过我更愿意把它理解成condition,但是,现在加上 client之后,condition已经不止condition的意思了,还是叫core吧,呵呵

zozoh 写道

引用
一想起jsptaglib实现,就会认为他每次都会跑一遍。

taglib 是会和 jsp 代码一起变成 java 代码,在被编译成 class, 这个class 中你 taglib 变成的那段 java 调用每次请求都要走一遍,有什么错吗?

影响中jsp的taginf好像可以插入一些申明代码,我想可能也能插入一些静态内容吧,我也没怎么用过,不敢乱说。
不过我我在Lite中的编译是直接吧编译后的js静态插入到中间代码中的,也就是说,吧模板翻译成脚本的工作不会做第二次。


0 请登录后投票
   发表时间:2009-04-21  
编译成js函数,有什么用?
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics