2012-03-23 6 views
1

1つのクラスを継承するクラスを作成しようとしています。dojo:引数の問題を手動で生成するコンストラクタチェーン

このクラスでは、親クラスのコンストラクタに渡される2つのオブジェクトを作成します。これを行うには

は、私は手動コンストラクタチェーンを使用する必要がありますし、「継承」と呼ぶ(http://dojotoolkit.org/reference-guide/1.7/dojo/declare.html#manual-constructor-chainingを参照)

私の問題は、私が正しく継承されたメソッドにパラメータを渡すことができないということです。次のコードを使用する場合:

define([ "dojo/_base/declare", "dojo/store/JsonRest", "dojo/store/Memory", "dojo/store/Cache", "dojo/store/Observable"], 

    function(declare, JsonRest, Memory, Cache, Observable) 
    { 
     var userStore; 
     return declare("app.UserStore", [Cache], 
     { 
      "-chains-": 
      { 
       constructor: "manual" 
      }, 
      constructor: function() 
      { 
       this.masterStore = new JsonRest({ 
        target: "/User/json", 
        idProperty: "name" 
       }); 

       this.cacheStore = new Memory({ idProperty: "name" }); 

       this.inherited([this.masterStore, this.cacheStore]); 
      } 
     }); 
    }); 

declare.jsでarg.calleeが定義されていません。

「引き数」を継承するパラメーターとして渡すと、呼び出し先が定義されます。 argumentsオブジェクトに動的に引数を追加することは可能ですか?

このコンストラクタで動的に作成されたオブジェクトで親をどのように呼び出すことができますか?

ありがとうございます!

答えて

5

this.inheritedの最初の引数は、常に文字通りargumentsでなければなりません。これはarguments.calleeに基づいてdojo.declareがスーパークラスメソッドを把握できるようにするためです。これが当てはまる場合、スーパークラスメソッドに異なる引数を送る場合は、this.inheritedの2番目の引数として配列を持つ必要があります。私は、これはコンストラクタのために動作することを確認していないが、私は次のことをしようとするだろう:

this.inherited(arguments, [this.masterStore, this.cacheStore]); 

私はそれが動作するかどうかを調べるには興味があります。

+0

ありがとうございました!それは私がやったことです。したがって、親コンストラクタへの呼び出しの問題を修正します。問題は、これでオブジェクトを作成すると、キャッシュ関数(get、query、...)へのアクセス権がないことです。だからまだ間違ったことがある。 – unludo

0

Dojo [1]の最近のバージョンでは、現在実行中の関数への参照をthis.inheritedの最初の引数として渡して、厳密なモードで使用できるようにします。副作用として

、第二の引数は、実際に(偶数非厳密なコードからの)アレイであることができる:

constructor: function fn() { 
    //... 

    this.inherited(fn, [this.masterStore, this.cacheStore]); 
} 

[1] 1.12以降、私は間違っていない場合。

関連する問題