【问题标题】: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 requiredojo.require 只需要一个字符串参数,并且是同步的,以及其他差异。您可能应该检查您使用的是哪个版本的 dojo,如果您想要 AMD require,只需使用 require
  • 我的 Eclipce IDE 中有 1.8.3,哎呀! 1.4.3_IBM (21629) 在 IBM 通用测试客户端中分别用于 iWidget 和 Business Space 运行时。那我现在该怎么办?
  • 这完全取决于您,显而易见的选择是更改您的代码以使其适用于 dojo 1.4.3,或者尝试以某种方式更改您的环境以加载更新版本的 dojo。

标签: dojo widget websphere-7


【解决方案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();
},

【讨论】:

    猜你喜欢
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多