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/placeDojo クラスではありません。これは、いくつかの関数プロパティを持つ単なるオブジェクトです。

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 クラスに mixin したい場合は、safeMixinを使用してそれを行うことができますが、なぜそうしたいのかわかりません。

于 2012-12-12T16:43:52.617 に答える