将 dojo.connect 与 dijit.WidgetSet 项一起使用时“应用不是函数”

Posted

技术标签:

【中文标题】将 dojo.connect 与 dijit.WidgetSet 项一起使用时“应用不是函数”【英文标题】:"apply is not a function" when using dojo.connect with an item of dijit.WidgetSet 【发布时间】:2011-07-19 12:31:44 【问题描述】:

我在 myJSP.jsp 上有一组 dijit.form.CheckBoxe。 在我的 dojo 类 myClass.js 中,我尝试抓住这些复选框并将它们中的每一个连接到一个应该在“onClick”事件上调用的函数:

(dijit.registry.byClass("dijit.form.CheckBox")).forEach(function(checkBox)
    dojo.connect(checkBox,"onClick",this,this.checkboxClicked);
);

当我单击任何复选框时,我会收到以下消息:“lls[i].apply 不是函数”

为什么我不能使用 dojo.connect? 顺便说一句 - 我使用 IBM Websphere Portal 6.1.5 的 dojo 版本,即 1.3.2。

【问题讨论】:

不知道,应该可以。但是1.3已经很老了。您可能想要升级到最新的 1.6.1。此外,您应该能够checkBox.connect("onClick", this, this.checkboxClicked) 以获得更简洁的代码。 恐怕无法升级。至于checkBox.connect - 它没有影响,我的意思是:由于某种原因,它没有将函数this.checkboxClicked 连接到我的复选框,因此当我按下它们时,不会调用该函数。 糟糕。我想我错过了这个。我依稀记得 Dojo 复选框会捕获 onClick 事件以进行内部处理。您可能必须改用“onChange”事件。检查文档。 【参考方案1】:

原因是forEach回调函数中的this实际上是指全局对象,而this.checkboxClicked实际上是undefined

要解决这个问题,请使用forEach 函数中的第二个参数来指定范围对象,即this 对象。

以下代码是否有效取决于调用此函数时的this 对象是否与具有checkboxClicked 函数的对象相同。如果不是,您可以更改为使用其他对象。

(dijit.registry.byClass("dijit.form.CheckBox")).forEach(function(checkBox)
dojo.connect(checkBox,"onClick",this,this.checkboxClicked);
, this);

【讨论】:

不幸的是,这不起作用。我仍然收到 "lls[i].apply is not a function" 消息。

以上是关于将 dojo.connect 与 dijit.WidgetSet 项一起使用时“应用不是函数”的主要内容,如果未能解决你的问题,请参考以下文章

dojo的on函数(以前的dojo.connect)

GIS-005-Dojo事件处理

扩展库中的不可关闭对话框

获取 onChange 事件类型

为啥我不能在 Javascript 中滚动循环?

无法解析以下构造函数:'dojox.mobile.RoundRectCategory'