IBM 的 Dojo 和 iWidgets:HandleEventException: TypeError: Object [object Array] has no method 'split'
Posted
技术标签:
【中文标题】IBM 的 Dojo 和 iWidgets:HandleEventException: TypeError: Object [object Array] has no method \'split\'【英文标题】:Dojo and iWidgets by IBM: HandleEventException: TypeError: Object [object Array] has no method 'split'IBM 的 Dojo 和 iWidgets:HandleEventException: TypeError: Object [object Array] has no method 'split' 【发布时间】:2013-04-29 07:34:40 【问题描述】:IBM 的 Dojo 和 iWidgets: 所以我的iWidget代码如下:
onEdit : function()
dojo.require(["dijit/Dialog", "dojo/dom"], function(Dialog, dom)
var node = dom.byId("makeADialog");
var myDialog = new Dialog( title:"From Source Node" , node);
myDialog.show();
);
,
当我运行它时 - chrome 浏览器控制台显示:
com.ibm.mm.iwidget.widget.IWidgetWrapperExtendedImpl IWidgetWrapper._handleEventInternal: widget: testWidget, eventName: onedit, HandleEventException: TypeError: Object [object Array] has no method 'split'
怎么了?
【问题讨论】:
我会使用 javascript 调试器来查看发生错误的调用堆栈。既然您提到了 chrome - 您可以通过打开源面板并单击左下角的暂停按钮来设置“错误中断”。我完全在猜测,但我怀疑您使用的是旧版dojo.require
,就好像它是较新的 AMD require
。 dojo.require
只需要一个字符串参数,并且是同步的,以及其他差异。您可能应该检查您使用的是哪个版本的 dojo,如果您想要 AMD require
,只需使用 require
。
我的 Eclipce IDE 中有 1.8.3,哎呀! 1.4.3_IBM (21629) 在 IBM 通用测试客户端中分别用于 iWidget 和 Business Space 运行时。那我现在该怎么办?
这完全取决于您,显而易见的选择是更改您的代码以使其适用于 dojo 1.4.3,或者尝试以某种方式更改您的环境以加载更新版本的 dojo。
【参考方案1】:
正如 cmets 中所述,问题在于您的语法。由于您使用的是包含模块的旧方式 (dojo.require()
),这也意味着您必须使用旧语法,而不是新语法。
这意味着您应该编写如下代码:
onEdit : function()
var Dialog = dojo.require("dijit.Dialog");
var node = dojo.byId("makeADialog");
var myDialog = new Dialog(
title: "From Source Node"
, node);
myDialog.show();
,
【讨论】:
以上是关于IBM 的 Dojo 和 iWidgets:HandleEventException: TypeError: Object [object Array] has no method 'split'的主要内容,如果未能解决你的问题,请参考以下文章
IBM Worklight - 部署 dojo 应用程序时出现 dojo script.js:21 错误
IBM Worklight 6.0 - Worklight Starter Dojo 示例损坏?
IBM Worklight 6.0 - Dojo 库在部署后使用 localhost