今天整理了一下之前的dojo(dojo FAQ)学习的资料,就又顺面把两个之前down下来学习的widget(autocomplete和process)重新在eclipse+dojo 0.4环境中修改并运行了了一下,包组织如下:
dojo.js
/ricebridge
/widget
process.html
process.css
RicebridgeProgress.js
autocomplete.html
autocomplete.css
AutoComplete.js
应用程序组织:
test_process.html
test_autocomplete.html
如test_process.html页面应用,自包装的widget:
<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了,呵呵
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的页面位置
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的要注意及时更新奥~