3

Baseから継承するクラスがあり[_WidgetBase, _TemplatedMixin]ます。Base正常に動作しています。今、私はこれBaseを機能していない別のクラスで継承します

define([
   "dojo/_base/declare", "dojo/parser", ...
], function(declare, parser, ...){
    return declare("mc.widgets.Base", [_WidgetBase, _TemplatedMixin], {
        templateString: 
            '<div class="mc-note-base">'+
            '</div>',
        constructor: function(argv){
            var self = this.inherited(arguments);
            return self;
        },
        data: function(){

        },
        postCreate: function(){
            ...
        }
    })
});

派生クラス

define([
    "dojo/_base/declare", "mc/base/path", "mc/widgets/Base"
], function(declare, path, Base){
    return declare("mc.widgets.Derived", [Base], {});
})

派生クラスがスローします

エラー: mc.widgets.Derived を宣言します: 継承されたチェーン コンストラクターを呼び出します

4

1 に答える 1

4

これはconstructor、ウィジェットのライフサイクルの一部が、より柔軟なウィジェット作成のために設計された特別なチェーン メカニズムで処理されるために発生します。詳細については、こちらを参照してください。ただし、状況に該当する部分には次のように記載されています。

スーパークラス コンストラクターは常に自動的に呼び出され、常にサブクラス コンストラクターの前に呼び出されます。この規則により、90% のケースでボイラープレートが削減されます。ニーズに合わない場合は、以下の手動コンストラクター チェーンを参照してください。他のすべてのメソッドについては、 this.inherited(arguments) を使用して、同じ名前のスーパークラス メソッドを呼び出します。

this.inherited(arguments)ウィジェットのコンストラクター メソッドから呼び出しを削除するだけで、問題は解決されます。これは、ウィジェットのセットアップを模倣し、ソリューションを示す単純な jsfiddleです。

于 2013-03-24T19:50:59.620 に答える