1

我正在尝试定义一个类,但是当我在代码中引用它时出现错误

错误:声明 custom.place:mixin #0 不是可调用的构造函数

define(['dojo', 'dijit/dijit', "dojo/_base/declare", "dijit/place"],
   function(dojo, dijit, declare, place) {

     return declare("custom.place", [place], {
       newMethod: function() { }
   });
 })

这行不通。但是下面的代码,工作正常!

define(['dojo', 'dijit/dijit', "dojo/_base/declare", "dijit/MenuItem"],
   function(dojo, dijit, declare, MenuItem) {

   return declare("custom.item", [MenuItem], {
       newMethod: function() { }
   });
})

任何帮助表示赞赏。谢谢。

4

1 回答 1

3

Dojo 类只能扩展其他 Dojo 类。dojo/place不是 Dojo 类;它只是一个具有一些功能属性的对象。

require(["dijit/place", "dijit/MenuItem"], function(place, MenuItem) {
  console.log(typeof place);
  console.log(typeof MenuItem);
});

上面的代码给出了控制台输出:

LOG: object 
LOG: function 

如果您想要一个具有地方实用功能和一些额外功能的对象,您可以创建自己的版本,如下所示:

define(["dojo/_base/lang", "dijit/place"], function(lang, place) {
  var newMethods = {
    foo : function () {}
  };

  return lang.mixin(newMethods, place);
});

如果您想将 place 的功能混合到 Dojo 类中,您可以使用safeMixin来实现,但我不确定您为什么要这样做。

于 2012-12-12T16:43:52.617 回答