Dojo附加点/ byId返回undefined

时间:2013-03-06 07:28:04

标签: dojo undefined getelementbyid

我制作了一个模板,并且有一个<select dojotype="dijit.form.ComboBox" dojoAttachPoint="selectPageNumber" id="selectPageNumber">标签,其中包含id和dojoAttachPoint,是#34; selectPageNumber&#34;。我想在创建时用选项填充它,所以我在postCreate函数中添加了一些代码:

var select = dijit.byId("selectPageNumber");

var select = this.selectPageNumber;

但我总是select未定义 我做错了什么?

UPD: 元素的问题已经自发解决,我没有得到解决方案。我既没使用dojo.addOnLoad也没使用widgetsInTemplate : true,它刚刚开始工作。但我又发现了同样的问题:当我添加另一个标签时,我无法得到它! HTML:

<select class="ctrl2" dojotype="dijit.form.ComboBox" dojoAttachPoint="selectPageNumber" id="selectPageNumber">
</select>
<select class="ctrl2" dojotype="dijit.form.ComboBox" dojoAttachPoint="selectPageNumber2" id="selectPageNumber2">
</select>

插件:

alert(this.selectPageNumber);
alert(this.selectPageNumber2);

第一个提醒显示this.selectPageNumber是有效对象,this.selectPageNumber2为空 widgetsInTemplate设置为false 所有代码都在dojo.addOnLoad()之内 dojo.require()有效 我正在使用IBM Rational Application Developer(如果它是必不可少的)。

为什么它如此不同?

3 个答案:

答案 0 :(得分:2)

根据您的语法,我假设您使用的是1.6。你的问题提到了模板和postCreate,所以我假设你已经创建了一个充当复合的小部件(模板中的小部件)。

假设1.6,在您的小部件中,您是否将widgetsInTemplate属性设置为true。这将告诉解析器您的模板具有在创建窗口小部件时需要解析的窗口小部件。

http://dojotoolkit.org/documentation/tutorials/1.6/templated/

我会从select中删除id。拥有id意味着每个页面只能实例化一次窗口小部件。您应该在窗口小部件中使用this.selectPageNumber来访问选择窗口小部件。

如果您使用的是1.7或更高版本,则应使用widgetsInTemplate mixin,而不是设置小部件dijit._WidgetsInTemplateMixin属性。

http://dojotoolkit.org/reference-guide/1.8/dijit/_WidgetsInTemplateMixin.html

答案 1 :(得分:1)

根据何时调用dijit.byId(),可能尚未创建窗口小部件。尝试使用dojo.addOnLoad()

 dojo.addOnLoad(function() {
     var select = dijit.byId("selectPageNumber");
 });

答案 2 :(得分:0)

我接近解决方案:似乎有某种RAD“缓存”不响应html代码中的更改。
Ways to purge the workspace environment with RAD (based on Eclipse)可能是一个解决方案。