1

私はこれに苦労しています:

Module1.js ファイルにこの単純なモジュールがあります。

define(['dojo/_base/declare', 'esri/map'], function (declare, map) {
    return declare(null,
        {
            name: "Module 1 name",

            constructor: function() {
                this.name = "module 1";
                //this.age = age;
                //this.currentResidence = currentResidence;
            },


            doSomething: function() {
                alert("calling from Module1");
            }
        });
});

Module1 から継承する Module2 を定義しようとしていますが、正しい構文が見つからないようです: これは私が現在持っているものです:

define(["dojo/_base/declare",
        "esri/map",
        "tut/Module1"],
    function (declare, map, Module1) {
        return declare(null, [Module1],     // or tut/Module1
        {
            name: "Module 2 name",

            constructor: function () {
                this.name = "module 2";
                //this.age = age;                 
            },


            doSomething: function () {
                this.inherited(arguments); // Call superclass method...
                alert("calling from Module 2");
            },

            doSomething1: function () {
                alert("calling do soething 1 from module 2");
            }
        });
});

私のコードのどこかで、私はこれをやっています:

  require(["tut/Module1", "tut/Module2"], function (Module1, Module2) {        
        var m = new Module1();
        m.doSomething();

        var m2 = new Module2();
        m2.doSomething();    

    }); 

次のように dojo をロードする ESRI スクリプトをロードする直前に、次の dojoConfig を定義しています。

     <script type="text/javascript">
   var dojoConfig = {
                async : true,                               
                packages: [{ name: "tut", location: liveString + '/scripts/xxxx/utilities'}]            
            };
 </script>
 <script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=3.0compact"></script>

Module1 への呼び出しが機能し、パッケージの定義が正しいことを示しています。ただし、Module2 を呼び出すと、オブジェクト [オブジェクト オブジェクト] にメソッド 'doSomething' がないという例外がスローされます。マニュアルを行ったり来たりしながら、さまざまな順列をいくつか試しましたが、正しい構文が見つかりません。今は推測しているだけなので、助けが必要になるでしょう。

Dojo 1.7 構文を使用して Module1 から継承するにはどうすればよいですか?

4

1 に答える 1

2

の呼び出しthis.inherited(arguments)は機能します(declareが'有効なミックスインではなく'をスローせず、どちらのコンストラクターメソッドもエラーをスローしない場合)。

試す

モジュール1

define(["dojo/_base/declare",
        "esri/map"],
    function (declare, map) {
        return declare("tut.Module1", [], {     // or tut>>.<<Module1
          constructor: function() { this.name='a'; console.log('a ctor'); }
          log: function() { console.log(this.name); }
        });
    }
});

モジュール1から派生したモジュール2

define(["dojo/_base/declare",
        "esri/map",
        "tut/Module1"],
    function (declare, map, Module1) {
        return declare("tut.Module2", [Module1],
          constructor: function() { this.name='B'; console.log('B ctor'); }
          log: function() { this.inherited(arguments); console.log(this.name); }
        });
    }
});

モジュールインスタンス('new Module()。constructor._meta')でconstructor._meta'bases'を反復処理してみてください。これにより、this.inheritedがどのように機能するかがわかります。

呼び出し

require(["tut/Module2"], function (M2) {
   var m = new M2();
   console.log('created');
   m.log()
});

出力します

「Bctor」
「Actor」
「created」
「A」
「B」

于 2012-07-24T10:00:14.470 に答える