求Javascript template的最佳实践 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
leben
V2EX    问与答

求Javascript template的最佳实践

  •  
  •   leben 2012-12-07 13:12:50 +08:00 4691 次点击
    这是一个创建于 4769 天前的主题,其中的信息可能已经有所发展或是发生改变。
    手头上在实现一个弹出层显示员工档案,员工档案用table列表,支持搜索。
    以前都是在服务器端把整个html拼好,现在像只返回json,然后在前段用hogan.js生成html。

    1、我现在页面里text/templdate放模板,但是这个弹出层在几个页面都用到,是不是只能把模板html用字符串放在js文件里?

    2、因为支持搜索,弹出层里的table数据可能会发生变化,每次都要用templdate生成rows html,然后再替换table里面的html。

    感觉用template在生成html这个阶段的确很方便,但是如果涉及复用和数据刷新就不是特别舒服。
    没有经验,求有经验的给点儿指点,谢谢!
    10 条回复    1970-01-01 08:00:00 +08:00
    powerfj
        1
    powerfj  
       2012-12-07 13:16:38 +08:00   1
    1 可以放页面的某个隐藏div里面的 注释里面,然后通过字符串操作拿到
    貌似也可以放隐藏的txtarea的value里面

    2 每次都生成没什么的,基本上不差
    aisensiy
        2
    aisensiy  
       2012-12-07 13:22:01 +08:00
    我觉得你主要是为了复用方便对吧,那你可以把template单独写一个文件,然后在后端渲染的时候引入这个文件。
    当然,这样感觉是又倒回去了,不过这样改成本比较小。
    leben
        3
    leben  
    OP
       2012-12-07 13:23:06 +08:00
    @powerfj
    1、因为我要在好几个页面都用这个弹出框,难道我要在每个用到的页面里面都放这个隐藏div?我以前从服务器端返回整个html,也是觉得每次都在客户端拼很麻烦。另外我感觉<script type="text/template" >比隐藏DIV好,你可以试试。
    2、每次生成的麻烦就是,这个弹出层我要做两个模板,一个是第一次生成的时候,包括搜索框、标题这些在内的,另外一个仅仅包括行格式,每次搜索之后,用第二个生成row html,然后替换弹出层里面table>tbody。我就是觉得这个很麻烦。
    leben
        4
    leben  
    OP
       2012-12-07 13:25:13 +08:00
    @aisensiy
    后台用的PHP Codeigniter。
    我再看backbone,对前端不是很熟,看着晕啊,呵呵。
    greatghoul
        5
    greatghoul  
       2012-12-07 13:32:51 +08:00
    我一般是
    <script type="text/x-tmpl-mustache" id="tpl-alert">
    <div class="alert {{#type}}alert-{{type}} {{/type}} fade in">
    <button type="button" class="close" data-dismiss="alert">×</button>
    {{{ message }}}
    </div>
    </script>


    然后用 https://github.com/janl/mustache.js

    $('#tpl-alert').mustache({ type: type, message: message }).appendTo(...);
    greatghoul
        6
    greatghul  
       2012-12-07 13:34:15 +08:00
    @leben 如果你是在很多个页面都用的话,把这部分放在一个公共的页面中,PHP里面 include 不就成了?
    powerfj
        7
    powerfj  
       2012-12-07 13:56:09 +08:00
    @leben 和放script标签里面差不多,一般我都是放在那个需要填充的div里面,这样就知道哪个模板需要放哪里了,然后如果需要看效果把注释去掉就好.

    对于两个模板这里,可以考虑放一个模板里面,子模板的概念,然后每次填充的时候就是子模板内容不一样
    aisensiy
        8
    aisensiy  
       2012-12-07 14:12:39 +08:00
    @leben @greatghoul ci 是个好框架,我也用过,我说的方法就是include即可。
    bitsmix
        9
    bitsmix  
       2012-12-07 14:37:52 +08:00
    jade
    leben
        10
    leben  
    OP
       2012-12-07 16:18:20 +08:00
    @greatghoul
    @powerfj
    @aisensiy
    谢谢,脑子抽筋了,老是把后端和前段分的那么清,的确用include就万事了,谢谢各位了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2611 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 09:40 PVG 17:40 LAX 01:40 JFK 04:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86