五月 20, 2011
» 自已写的一个类似jquery template的函数

原本是在jquery上看到的template的用法(http://api.jquery.com/jQuery.template/),不过发现它不是包括在jquery包中的,要单独下载插件。下载后试用,发现一个问题:

如果我插入的是一个HTML的片段,执行后这个template会转义。但是也没有深入研究代码。想到以前我曾经扩展过jquery的一些基础函数,这个项目在 http://code.google.com/p/jbasicext/ ,是我很早以前还在弄django时写的。当时就已经有一个template的函数,不过那是是学propertype.js,直接在String对象上进行的扩展。于是这次是直接重写了一个template函数,方法如下:

var template = function(tmp_string, hash_or_array){
    function _replace(m, word){
        var r;
        if (Boolean(word.match(/^[0-9]+$/)) && hash_or_array.constructor == Array)
            r = hash_or_array[parseInt(word)];
        else
            r = hash_or_array[word];
        if(r == undefined)  return '';
        else return r;
    }
    return $(tmp_string.replace(/\$\{?([A-Za-z_0-9]+)\}?/g, _replace));
}

使用方法如下:

>template('<div>${name}</div>', {name:'limodou'})
[<div>limodou</div>]
>template('<div>${name}</div>', {})
[<div></div>]

上面是使用${name}形式的变量。这个函数还可以使用${n}这种数字形式。如:

>template('<div>${0}</div>', ['limodou'])
[<div>limodou</div>]
>template('<div>${0},${1}</div>', ['limodou', 'test'])
[<div>limodou,test</div>]

 

UPDATE:在网上学习了一下,原来John Resig早在2008年就写过一个更强大的微模板 http://ejohn.org/blog/javascript-micro-templating。在其中更可以使用javascript语句,而不仅仅是变量替换。

另外,为了方便定义模板可以这样:

    <script type="text/html" id="commentTemplate">

        <li>${name}</li>

    </script>

把你要使用的模板片段放在<script>中,并且使用type="text/html"。这样使用时,可以:

template($('#commentTemplate').html(), {name:'limodou'})


类别:Web 查看评论

四月 20, 2011
» 写正确的sql语句

mysql> SELECT count(*)  FROM human, department  where (not human.assigned or exists(select resource.user from resource where resource.user=human.login_name group by resource.user having sum(resource.workload)<1)) and department.code = human.department and department.kfzx = 1;

+----------+

| count(*) |

+----------+

|       34 |

+----------+

1 row in set (0.16 sec)

 

mysql> SELECT count(*) 

    -> FROM human, department 

    -> where (not human.assigned or human.login_name in (select resource.user 

    -> from resource group by resource.user

    -> having sum(resource.workload)<1)) and department.code = human.department and

    -> department.kfzx = 1;

+----------+

| count(*) |

+----------+

|       34 |

+----------+

1 row in set (23.74 sec)

 

上面是在我的项目中用到的sql语句,第一条是修改后的例子,第二条是有问题的,功能完全一样,但是性能差别太大了。区别就在第二个sql语句,对不需要处理的数据都进行了处理。而第一个只对当前记录进行了分组处理,所以要快太多了。

 

记录一下。


类别:Web 查看评论

八月 31, 2009
» pyForum

看到web2py几两天有几个在说要将邮件列表般到pyForum上去,刚开始没注意。后来我想,pyForum是什么东西呢?上网一查才知道,原来是使用web2py开发的一个论坛。 http://www.pyforum.org 界面还真不错。django下好象就没有这样的东西。有时间研究下,看看能学到些什么?
类别:Web 查看评论

七月 6, 2008
» Ò»¸öÇ¿´óµÄjavascript ui¿â

http://mochaui.com/demo/

Ϊʲô˵ËüÇ¿´ó£¬ÒòΪËüʹÓÃÁËcanvasÀ´Éú³É½çÃæ£¬ÕâÑùÐí¶àÔ­±¾ÐèÒªCSSÖ®ÀàµÄ¶¼Í¨¹ýcanvas»æÖÆÀ´ÊµÏÖÁË¡£ÏÖÔÚÎÒ»¹²»Çå³þÈçºÎʹÓÃËü£¬µ«ÊÇͨ¹ýËüµÄdemo¿ÉÒÔ¿´µ½¿ÉÒÔÔÚieºÍffÏÂʹÓá£

˵²»¶¨ÕâÒÔºóÊÇÒ»¸ö³±Á÷£¬ÈÃä¯ÀÀÆ÷Ô½À´Ô½ÏóÒ»¸ö¿Í»§¶Ë£¬´Ó¶øÈÃǰºǫ́³¹µ×·ÖÀ룬¶øÇÒÓпÉÄÜʹµÃ¿ª»áÔ½¸ü¼òµ¥£¿
Àà±ð£ºWeb ²é¿´ÆÀÂÛ

六月 27, 2008
» 有趣的YAML

这里的YAML可不是用来做序列化的yaml,它是一个CSS的模板,就象blueprintcss一样。不过与blueprintcss不同,它采用是Flexible布局的控制,而不是固定的网格。说实在的,我对CSS不是很精通。但是通过试验,使用Flexible布局的控制在页面大小发生变化时可以自动变化,而固定网格则不会变。也许你认为没什么用,不过象对于使用宽屏的显示器,这种方式可以使用网页扩得足够大,感觉要好于固定网格。所以我打算把uliwebproject的css换成它的。

发现YAML是在Smashing Magnize的一篇Blog中发现的。在YAML的网站上有一篇文档是PDF格式的,讲得很详细,不过比较长,我可能更关心怎么使用它。在下载的YAML的源码包中已经有不少例子了,可以直接参考。另外它提供了一个Builder的工具,的确做得不做,可以动态进行设计,可视化做得很好。看到它使用了jquery的东西。

那么如何使用生成的结果呢?在YAML的网站上有一个Simple Project Source的下载,它是一个示例。下载后压解到一个目录下。然后把Builder工具生成的文件按对应的目录和文件放到Simple Project Source中对应的目录下进行覆盖就行了。

还没有更多的心得。
类别:Web 查看评论

A Feedjack powered Planet
A Django site.