论坛首页 入门技术论坛

在前端开发中应用JS模板引擎 -- 事半功倍!

浏览 25143 次
精华帖 (0) :: 良好帖 (6) :: 新手帖 (7) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-08-28  
忽然想起来,有个框架叫ext-core,为了用模板的话几十k就够了,不用引1M的东西,而且ext-core可以替代jquery
0 请登录后投票
   发表时间:2010-08-28  
markone 写道
回复楼上的朋友
如果是使用别人的控件的话,可能自定义模板的意义不大了
如果是自己开发控件,那我建议采取这样的模式:
1、将控件的html样式写成模板
2、在控件的javascript类中,不要采取代码生成html的方式;将模板作为类属性,show出控件的时候,将控件所需的data apply到模板上即可,性能无需担心,很快的
3、之所以将模板作为类属性,是为了方便替换,如果想改变控件的外观,只需要重写模板就行,数据和控制代码不变

ps:正如楼上有位朋友所说,这是个很小的功能,关键在于灵活应用,呵呵,我在这种模式下工作了不少时间了,感觉效率提高了不止一个档次啊

楼主说的第二点,我不是很明白,你的意思我是这样的理解的:
首先我新添加一个 .js 文件,然后在这个 .js 文件中只做一件事:定义一个变量,变量的值是控件的 html 部分及样式;然后将这个js文件引到要应用模板的页面中;其次就要为这个模板准备一个 data ;最后用那个 .js文件中的变量实例化一个模板对象,并将准备好的 data apply到这个模板中。理解完毕
不知道我对楼主的理解是否正确!!
个人以为有点像自己写了一个插件,只是向楼主您说的效率被提高了一个档次!!
0 请登录后投票
   发表时间:2010-08-28  
shiren1118 写道
忽然想起来,有个框架叫ext-core,为了用模板的话几十k就够了,不用引1M的东西,而且ext-core可以替代jquery

发过来一个例子的源码和网址让我看看行吗?
0 请登录后投票
   发表时间:2010-08-28  
楼主,我还要请教你一个问题:
为什么您说在这种模式下工作效率会提高很多??
0 请登录后投票
   发表时间:2010-09-01   最后修改:2010-09-01
很好,最大的特点就是简单方便,随便一个人,引用一段脚本就可以做事了。

前端模板这个东西,如果纯js实现是有局限的:
1. 不能共享编译结果,每次都需要重新编译。
不是说,即时编译就一定有性能问题,但是如果考虑了太多的性能因素,模板语法就不能太强大,设计就不能太人性化。
2. 模板源码编码在js字面量中。
ide支持不太好,语法检查不方便。。。。。

所以如果要运用前端模板,我更看重借用后端的模板平台,让后端模板可以自动编译前端模板。像lite那样。


0 请登录后投票
   发表时间:2010-09-14   最后修改:2010-09-14
楼主的软件,正是我想用的

但我从google下载的代码 ,使用jquery 1.4.2时有个问题

会提示sweet未定义

http://code.google.com/p/sweet-template/issues/detail?id=1


我有个应用系统 是这样做的

前端使用json将数据传到后台,再以json形式返回执行结果
再用js将结果结合手写的一份界面的html代码。即复杂易错又很累人

目前的计划是界面模板使用xslt,数据使用xml,js使用jquery框架及jqueryxslt插件

页面的第一次生成可使用浏览器的xslt解析器完成

对ajax应用,可使用jqueryxslt来完成,相对就简单多了

但是xslt不是由浏览器原生的解析器来完成的,而是用js来模拟xslt的功能,
可能存在低效、xslt支持不完整的问题

于是想到是否有js的模板

终于找到一比较js模板的问题,也就找到这里了

麻烦楼主了。





发贴还要做题,很抓狂,很讨厌
0 请登录后投票
   发表时间:2010-09-14  
我用这个论坛上下载到的例子运行,正常

现在遇到个问题

            $("ul#list").template(tpl).applyData(data, {
            noIterate: true,
                rendering: function(context) {
                    context.data.index = context.index;
                },
                rendered: function(dom, context) {
                    var idx = context.index + 1;
                    dom.click(function(e) {
                        alert("This is the No." + idx + " person.");    
                    });
                }
            });
           
我增加了一行“noIterate: true”让它不自动遍历数组,应该是这个意思吧

可还是把数组的所有数据全显示出来了

求解

0 请登录后投票
   发表时间:2010-09-14  
楼上的朋友不好意思,好久不上论坛了,刚看到你的问题
第一个问题,google code 里sweet-jquery-plugin是将sweet template集成到jquery里使用的,sweet.js是不和任何框架集成的,你也很容易把这个小组件和任何框架集成使用
第二个问题,我文档里应该出了点问题,是notIterate不是noIterate。。。给你带来不便实在是不好意思
notIterate的意思是,当data为数组的时候,如果notIterate为false,则tpl里不需要使用for或者foreach遍历数组,组件会自动遍历数组并对数组的每一个item调用一次rendering和rendered函数,如果notIterate为true,则将一个数组data一次性apply而不遍历,整个data调用一次rendering和rendered函数,不知道我说清楚没有。
如果还有疑问,请加我msn: fucrosoft@hotmail.com或者gmail我 wanglingshu@gmail.com
0 请登录后投票
   发表时间:2010-09-14  
另外,我也同意xml数据是一个不太好的选择,因为毕竟需要解析,就算使用ie下的xmldom也未必有多高效。所以服务器端直接产生json数据是最好的选择。
ps: client对server post数据的时候,json和xml都不是好选择,应该组织一种服务器端能够快速解析的数据格式,可以参考一下dwr的做法,虽复杂但的确高效。纯技术探讨
0 请登录后投票
   发表时间:2010-09-15  
谢谢

那个问题一会再去试试

讨论到post数据json也不是好选择,愿闻其详

以下是我写的json上传数据的方法,不知能否指点一二

JSON.stringify(d) 使用json的js库对数组进行编码
json_decode 使用json的php库对数组进行解码




js代码

d=new Object();
d.t='delete';
d.id=$(this).attr('id');
$.ajax({type:'post',
url:"basedata.php",
dataType:'json',
data:{d:JSON.stringify(d)},
success:function(h){
if(h != null)
{
if(h.sqlerror){  sqlerror(h); return;  }
switch(h.php_status)
  {
  case 'ok':
......
   break;

  case 'error':
  ......
break;
}
}
}});



php代码

$d=json_decode(mb_ereg_replace('\\\\','',$_POST['d']));

switch($d->t)
{
case 'delete':
$id=$d->id;
if($id=='')
{
set_proc_debug('basedata_delete_check_id');
$result->php_status='error';
$result->code='strs.basedata.delete_id_null';
echo json_encode($result);
exit;
}
set_sql_debug_start(0);
$query="/* Gitem basedata.php 030 */
delete from detail_name where id='$id' ";
$res=$mysqli->query($query);
if($mysqli->errno==1451)
{
$result->php_status='error';
$result->code='strs.basedata.delete_1451';
echo json_encode($result);
exit;
}

$result->php_status='ok';
echo json_encode($result);

exit;
break;
}
0 请登录后投票
论坛首页 入门技术版

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