未捕获的TypeError:对象不是dojo自定义小部件的函数

时间:2014-08-27 21:48:35

标签: javascript dojo

当我尝试在我正在创建的dojo小部件中实例化一个类时,我遇到了主题错误: 我在名为/ Templates的目录中有小部件和小部件的html模板。这是代码:

widget(Templates / Person.js):

  define([
 "dojo/_base/declare",
 "dijit/_WidgetBase",
  "dijit/_TemplatedMixin",
 "dojo/text!Templates/Person.htm"
 ],
  function (declare, _WidgetBase, _TemplatedMixin, Person) {
    return
    declare([_WidgetBase, _TemplatedMixin], {
        templateString: Person
    });
}

);

html模板(Templates / Person.htm)

 <div>
 <p>Bob</p>
 <p>Jones</p>
 </div>

测试页面(TestPerson.htm)

     <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>

</head>
<body class="claro">
<script data-dojo-config="async: 1, dojoBlankHtmlUrl: '/blank.html',
        packages: [ {
            name: 'Templates',
            location: location.pathname.replace(/\/[^/]+$/, '') + '/Templates'
        } ]"
    src="//ajax.googleapis.com/ajax/libs/dojo/1.10.0/dojo/dojo.js"></script>
<script>
    require([
      "Templates/Person"
 ], function (Person) {
     var p = new Person();//The object is not function error occurs here
 });
    </script>
</body>
</html>

有什么想法吗?可能是因为我正在使用CDN吗?

由于

1 个答案:

答案 0 :(得分:0)

它对我来说很好,你确定加载了正确的文件(在浏览器控制台中检查响应)。

您唯一缺少的是您正在实例化Person窗口小部件,但您没有将其绑定到DOM节点。这对我来说很好:

var p = new Person({}, "person");

然后我添加了一个名为:

的DOM节点
<div id="person"></div>

在这里你可以看到它正常工作:http://plnkr.co/edit/0doWDEB6C7Rbg4kU4Mtp?p=preview