dojo使用疑难杂症集锦

最近在用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 call startup and resize 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类型的.

原文地址:https://www.cnblogs.com/jcli/p/3381720.html