dojo widget 点滴

  今天整理了一下之前的dojo(dojo FAQ)学习的资料,就又顺面把两个之前down下来学习的widget(autocomplete和process)重新在eclipse+dojo 0.4环境中修改并运行了了一下,包组织如下:

/ dojo  -- (dojo目录)
    dojo.js
    
/ ricebridge
        
/ widget
            process.html
            process.css
            RicebridgeProgress.js
            autocomplete.html
            autocomplete.css
            AutoComplete.js

应用程序组织:

/ dojoApp  -- (与dojo目录同级)
    test_process.html
    test_autocomplete.html

如test_process.html页面应用,自包装的widget:

< script type = " text/javascript "  src = " ../dojoAjax/dojo.js " ></ script >
< script language = " JavaScript "  type = " text/javascript " >
// require statements
dojo.require(  " dojo.widget.* "  );

// 注册自定义包的路径(相对于dojo.js的相对路径)
//
并注册名称空间,方便页面的使用
dojo.registerModulePath('ricebridge.widget','ricebridge / widget');
dojo.require(
" ricebridge.widget.RicebridgeProgress " );
dojo.registerNamespace(
" ricebridge " , " ricebridge.widget " );

// all dojo.require above this line
dojo.hostenv.writeIncludes();  // makes debugging in Venkman possible
</ script >

< div dojoType = " ricebridge:RicebridgeProgress "  widgetId = " progress "
  numboxes
= " 30 "  width = " 300 "  height = " 20 "  multiplier = " 10 "
  basecolor
= " #ccc "  oldcolor = " #666 "  hicolor = " #00f " ></ div >

或者如下:

< ricebridge:RicebridgeProgress widgetId = " progress1 "
  numboxes
= " 30 "  width = " 300 "  height = " 20 "  multiplier = " 10 "
  basecolor
= " #ccc "  oldcolor = " #666 "  hicolor = " #00f " />

当然也可以在js中动态创建widget.


在调试autocomplete widget的调试中,总结了一下:
   ~1. dojo widget定义时的templatePath和templateCssPath指定时,其模版文件(html和css)的指定名称要和文件系统中的一致,包括大小写,我因这个原因之前总报dojo load error 404,如此调整后方可.
   ~2. 另外操作document中的dom nodes(是widget所在的document而非widget的template)应写在定义widget时的postCreate方法中,这个方法是在widget已被parse到html时触发的,而不应在常用的fillInTemplate方法中(此方法触发时仅仅是widget的template被实例化,当然其dom nodes亦可操作了,但并没有所在document的信息),参见dojo book.
   ~3. 再另外,之前我利用json在client/server传输数据时一直设置minetype为text/json,然后在数据load成功后eval成js object,若你直接设置为text/javascript也就不需要额外的eval了,呵呵

dojo.io.bind({    
url: 
" http://foo.bar.com/sampleData.js "
load: 
function (type, evaldObj){  /*  do something  */  },    
mimetype: 
" text/plain " //  get plain text, don't eval()    
transport:  " XMLHTTPTransport "
});

   ~4. 靠关键字keyword的事件连接操作及0.4获取dom node的页面位置

dojo.event.kwConnect({
srcObj:     exampleObj,
srcFunc:    
" foo " ,
targetObj:  exampleObj,
targetFunc: 
" bar " ,
once:       
true ,
delayed :milliseconds 
});

dojo.html.getAbsolutePosition(this.textbox).y
dojo.html.getBorderBox(this.textbox).height  
dojo.html.getAbsolutePosition(this.textbox).x

   最后(再再另外),0.4声明了许多要在0.5中淘汰的东东,关切dojo的要注意及时更新奥~

你可能感兴趣的:(widget)