::-- ZoomQuiet [2005-12-11 04:50:15]

1. K3日:发现!

Cheetah 只能组织有模板的页面输出,但是……

1.1. Karrigell_QuickForm

Karrigell_QuickForm 真的是想要什么就来什么!

   1 from Karrigell_QuickForm import Karrigell_QuickForm
   2 
   3 p = Karrigell_QuickForm('teste','POST','foo.py','Authentication')
   4 p.addElement('text','login')
   5 p.addElement('text','password')
   6 p.addRule('login','required',"Login is required!")
   7 p.addGroup(["submit","botao_enviar","submit","Send"]
   8            ,["reset","botao_limpar","reset","Clear"])
   9 """根据习惯hack! 原先的自动生成 value 的为指定按钮文字。
  10 p.addGroup(["submit","botao_enviar","Send"]
  11            ,["reset","botao_limpar","Clear"])
  12 """
  13 p.display()

6行完成一个标准的登录表单!!!哈哈哈!赞!snap-KwDay30.png

1.1.1. 改造

毕竟是 alpha 版本,居然还是全面的table 结构!

   1 def addRadioGroup(self,name,value):
   2         """add a radio element - addRadioGroup('genre',{'male':'Male','female':'Female'})"""
   3         self.form_list.append("<tr><td align='right' valign='top'><b>"+name.title().replace('_',' ')+":</b></td> <td valign='top' align='left'>")
   4         radio = ""
   5         t = value.items()
   6         for a,b in t:
   7             radio = radio + "<input type='radio' name='"+name+"' value='"+a+"'>"+"<label><font face=verdana size=2>"+b+"</font></label><br>"
   8         self.form_list.append(radio+"</td>")
   9         self.form_list.append("</tr>")

増补为:

   1 def addRadioList(self,name,desc,value,id=""):
   2     """add a radio element export as UL LI group
   3     """
   4     htm = """
   5         <li id='%s'><b>%s:</b>
   6             <ul>"""
   7     self.form_list.append(htm%(id,desc))
   8     radio = ""
   9     t = value.items()
  10     tmpl = """<li>
  11         <input type='radio' 
  12         name='%s' 
  13         value='%s'>  
  14         <label>%s</label>      
  15         """        
  16     for a,b in t:
  17         radio = radio + tmpl%(name,a,b)
  18     self.form_list.append(radio+"</ul></li>")

1.1.2. 利用

直接将昨天的展示函式修改一下子就应该好用的!

   1 def qpubish(dict):
   2     exp = ""
   3     p = Karrigell_QuickForm('fm_kq','POST','#',dict.desc.desc)
   4     
   5     p.addElement('node','<ul>','')
   6     # 深入数据 基本和昨天的一样,仅仅是输出时使用 Karrigell_QuickForm 对象而已
   7     qli = {}
   8     k = [int(i) for i in dict.ask.keys()]
   9     k.sort()
  10     for i in k:
  11         ask = dict.ask[str(i)]
  12         qk = [j for j in ask.keys()]
  13         qk.sort()
  14         for q in qk:
  15             if 1==len(q):
  16                 qli[q] = ask[q]
  17             else:
  18                 pass        
  19         p.addRadioList("cr_ask%s"%i
  20                    ,ask["question"]
  21                    ,qli)
  22     p.addElement('node','</ul>','')
  23     p.addGroup(["submit","btn_submit","提交"]
  24                ,["reset","btn_reset","重写"])

1.2. JS 问题

一切顺心,表单正确生成了,但是,Karrigell_QuickForm 提供的JS检验不支持Radio列表的!

1.2.1. 继续发现!

现在的问题是有什么现成的可以模式化的定义表单测验的JS组件?

snap-KwDay30JVF.png

1.2.2. 迁就,先!

1.2.2.1. 关键代码

JVF的使用很有个性,使用外部的XML 文件进行设置,标准的J2EE行为哪!

1.2.3. 果然不出所料

仅仅追加少量代码就完成所想的客户端JS验证功能

def qpubish(dict):
    ...
    ## 具体问题解析
    k.sort()
    for i in k:
        ...
        p.addJSRule("cr_ask%s"%i,"问题%s "%i)
    ## 整体行为处理
    p.addJSValidation()
    p.saveJSRule("js/validation-config.xml")
    
    p.addElement('node','</ul>','')

1.3. 滥用Leo

到现在页面都是白丁!不能忍了!加载CSS!

1.3.1. CSS设计技巧

复用以前自个儿的积累是非常好的事儿!

snap-KwDay3color.png

1.3.2. CSS

snap-KwDay3css.png

1.4. 小节

今天发现并引入了 KQFJVF好象有点复杂的样子…… snap-KwDay3done.png

1.5. 实例下载

使用 SVN 下载:

  1. KwDay3实例

  2. 注意有在外部安置的 JS-JVF 目录

1.6. 讨论


返回 KarrigellWebDev -- 快速体验K开发

  1. 测试JS 成功引用否的小技巧:alert("Include KO!"); JS 中加入强制提示看刷页面见分晓! (1)

KwDay3 (last edited 2009-12-25 07:18:00 by localhost)