最近在用dojo做项目, 把使用过程中遇到的一些问题记录下来, 方便以后查阅, 因为问题不断, 所以持续更新中..........
嵌套 TabContainer 时会出现样式问题: tab控制样式问题。加入如下属性即可:
<div data-dojo-type="dijit/layout/TabContainer" controllerWidget="dijit.layout.TabController" style="height:100%">
dijit/layout/_LayoutWidget 的 startup方法的执行时间点,可以在这个方法上对子对象进行操作,因为该方法在生命周期是处理在该窗口子对象都创建并在dom流上.
在使用dgrid时要注意startup方法的执行时间点. 要保证其已在dom流中. 万一在错误点执行的话,会出现渲染不正确(头部header被重叠).此时可以在父窗口中调用grid.resize().
在使用dgrid的插件:selector 时,返回的store数据必需要带有id字段。不然会在触发全部选择事件时会报错。所以特别强调的是对所有的store数据严格有唯一主键标识。并不用一定是"id",可以指定 identityProperty字段值
Grid的数据源只能是js数组,指定store属性没用。因为它没有store属性。OnDemandGrid 和 [Grid,Pagination]组合时才可以指定store属性。
在自定义ui模板组件时,如果里面有BorderContainer框架,则自定义的组件不要继承BaseWidget或_LayoutWidget, 要直接继承BorderContainer
- Mixing in
DijitRegistry
will allow dijit layout widgets to recognize dgrid instances as child widgets, and as a result the layout widgets will take care to callstartup
andresize
appropriately on the list/grid
当一个Grid在一个Layout组件里时, 为了正确显示Grid,可以让Grid扩展DijitRegistry,这样layout就可以重新组织和实例化grid,并正确初始化它. 示例代码:
var grid = new (declare([OnDemandGrid, DijitRegistry]))({ store: myStore, columns: myColumns }, "grid");
dojox/form/Manager注意:
基表单子元素必需要有name属性:
<input type="text" name="date1" value="2005-12-30" data-dojo-type="dijit/form/DateTextBox" required="true" style="8em"/></td>
在包含Manager的父容器定义时,如果覆盖重写方法时,必需先执行
this.inherited(arguments);
在处理表单时如果用dojox/form/Manager时, 在对表单设置值时调用setFormValues时, 我发现 dijit/form/RadioButton 元素的值设置不成功, 这是因为dojo代码有点问题: dojox/form/manager/_Mixin.js中310中代码如下:
widget.set("checked", widget.value === value, !this.watching);
竟然用的 === , 有必要这样吗????? 所以我们在html中用
<input id="${id}-comeFrom-1" type="radio" data-dojo-type="dijit/form/RadioButton" value="2" name="comeFrom"/> <label for="${id}-comeFrom-1">customer</label>
因为模板中的value提取后是字符类型的值, 和我服务端返回的整数不能相等, 所以不相等. 改成value=2这种形式也没有.要改成如下:
<input id="${id}-comeFrom-1" type="radio" data-dojo-type="dijit/form/RadioButton" data-dojo-props="checked:true,value:2" name="comeFrom"/> <label for="${id}-comeFrom-1">customer</label> <br/>
在data-dojo-props中定义value, 必需是int类型的.