2011-09-14 8 views
1

私は以前の質問(Original Question)を求めました。私はまさに私が望んでいた素晴らしい答えを得ました。しかし、私はJavascript/Dojoを初めて使っているので、私はそれを完全に理解することができず、質問の回答者でもありませんでした。DOJO:関数のパラメータの説明

私の質問は次のとおりです。次のコードはどのように機能しますか?

dndController: function(arg, params){ 
    return new dijit.tree.dndSource(
     arg, // don't mess up with the first parameter 
     dojo.mixin({}, params, {copyOnly:true})) 
      //create a copy of the params object, but set copyOnly to true 
} 

「args」と「params」のパラメータが最も邪魔になる部分です。私は彼らがどこから来て、彼らが何を意味するのか理解していません。 (コードに文脈が必要な場合は、後で問題を編集することができますので、コメントに投稿してください)。また、私はなぜnew dijit.tree.dndSourceを直接使うことができなかったのですか?それを返すために関数を使う必要があったのはなぜですか?

おかげ

+0

「dndController」と呼ばれるものを探します。 'new ... 'を直接使うことができるかもしれないが、それはもっと短いだろうか? –

+0

それは木のコンストラクタのように見えます。私はツリーの宣言でデフォルトのdndControllerをオーバーライドしています。 – hbhakhra

+0

Dojoは、任意の 'dndSource'定義を許可する拡張機能のポイントとして' dndController'を使用しているようです。ここでは 'tree.dndSource'を使用しています。したがって、 'this'引数のパラメータは' tree.dndSource'で必要とされるツリー自体であり、その実装は任意のツリーで使用できます。 –

答えて

1

は道場ソースでdijitの/ Tree.jsを見てみましょう。 (dijitのライフサイクルの一部として任意のウィジェットで使用されている)のPostCreate関数内Tree.jsで

、:

if(this.dndController){ 
    if(dojo.isString(this.dndController)){ 
     this.dndController = dojo.getObject(this.dndController); 
    } 
    var params={}; 
    for(var i=0; i<this.dndParams.length;i++){ 
     if(this[this.dndParams[i]]){ 
      params[this.dndParams[i]] = this[this.dndParams[i]]; 
     } 
    } 
    this.dndController = new this.dndController(this, params); 
} 

あなたはdndControllerプロパティが何であるかをチェックするセクションが表示されます。文字列の場合は、dndController属性を、文字列が表すクラスを作成する関数に設定します(これはdojo.getObject(string)の処理です)。

たとえば、this.dndControllerが文字列"my.special.dnd.controlller"の場合、呼び出されたときに新しいインスタンスmy.special.dnd.controllerをインスタンス化する関数が返されます。

それをコピーした機能を実行することにより、続いオブジェクトにいくつかのパラメータ、次のいずれか

(1)dojo.getObject

経由見上げ

(2)あなたが渡されたカスタム関数を使用しています。

dndコントローラとして使用する特定のクラスを指定する必要がある人もいるし、ツリーが渡されたパラメータに基づいて何らかのカスタムを行う必要がある人もいるので、このウィジェットのメンテナーはこのようにします。 。