【问题标题】:"apply is not a function" when using dojo.connect with an item of dijit.WidgetSet将 dojo.connect 与 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”事件。检查文档。

标签: dojo dijit.form


【解决方案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" 消息。
猜你喜欢
  • 2019-05-12
  • 2017-07-20
  • 1970-01-01
  • 2017-04-21
  • 2020-12-10
  • 2022-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多