0

我做了一个模板,有一个<select dojotype="dijit.form.ComboBox" dojoAttachPoint="selectPageNumber" id="selectPageNumber">带有 id 的标签,dojoAttachPoint 是“selectPageNumber”。我想在创建时用选项填充它,所以我向 postCreate 函数添加了一些代码:

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

或者

var select = this.selectPageNumber;

但我总是select不确定。
我究竟做错了什么?

UPD: element 的问题已经自发解决了,我没有得到解决方案。我没有用也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设置为假。
里面的所有代码都是dojo.addOnLoad()
dojo.require()有效的
我正在使用 IBM Rational Application Developer(如果它是必要的)。

为什么如此不同?

4

3 回答 3

2

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

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

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

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

如果您使用的是 1.7 或更高版本,则不应设置 widgetswidgetsInTemplate属性,而应使用dijit._WidgetsInTemplateMixinmixin。

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

于 2013-03-06T16:27:10.190 回答
1

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

 dojo.addOnLoad(function() {
     var select = dijit.byId("selectPageNumber");
 });
于 2013-03-06T15:52:40.380 回答
0

我接近解决方案:似乎有某种 RAD“缓存”不响应 html 代码中所做的更改。
使用 RAD(基于 Eclipse)清除工作空间环境的方法可能是一种解决方案。

于 2013-03-15T11:37:01.050 回答