将 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 项一起使用时“应用不是函数”的主要内容,如果未能解决你的问题,请参考以下文章