在dojo中定义自定义类

时间:2012-12-12 16:13:03

标签: javascript dojo

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

错误:声明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() { }
   });
})

感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分: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);
});

如果你想将地方的功能混合到一个Dojo类,你可以使用safeMixin来实现它,但我不确定你为什么要这样做。