2011-09-12 7 views
1

私はDOJOには新しく、この2つの使い方の違いを理解しようとしています。インスタンス化とソースを使用したDOJOの違い

dndController: new dijit.tree.dndSource("dijit.tree.dndSource",{copyOnly:true}) 

dndController: "dijit.tree.dndSource" 

もう一つは動作しますが、私は最初のものを使用するときに、私のツリーをロードするとき、それは私にエラーを与えます。それはタイプノードが定義されていないと言います。最初のものを使いたい理由は、copyOnlyをtrueに設定したいからです。

すべての回答が高く評価されました。

答えて

3

このパラメータでは、渡されたオブジェクトの代わりにファンクションのコンストラクタが必要です。おそらく、次のように動作します:

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 
} 

いくつかの説明:

私は実際に木にドラッグアンドドロップについては何も知りません。私がしたのは、dndControllerがどこで使われているかを知るためにTreeソースコード(dijit/Tree.jsなどで)を見ていただけでした。その点から、私はこれら2つのパラメータ(またはそのような関数へのパスを表す文字列)を受け取ることができる関数であるはずであることが分かりました。実際に使用されているdijit.tree.dndSource関数は、私があなたの質問文からコピーしたもので、うまくいくと思っています。

dojo.mixin関数は、第2、第3、...引数のすべてのオブジェクトを第1引数に混在させます。新しい、空のオブジェクトを「受信」オブジェクトとして使用することで、オリジナルのparamsオブジェクトを変更せずにcopyOnlyを設定し、paramsの浅いコピーを作成するきっかけができます。

+0

@missingnoThanks!それは完璧に働いた。私はDojo/Javascriptの新機能を使用しているので、もっと説明していただければ幸いです。私は使用されているコンポーネント(treeとdndSource上のdojo.mixinとsource)を調べようとしました。具体的には、これは私が得られない点です: "arg"と "params"とは何ですか?また、最初のパラメータが空であるため、dojo.mixinは動作しています。ありがとう、それは素晴らしい答えでした! – hbhakhra

+0

答えを少し更新しました。 – hugomg

+0

それは事を明確にするのに役立ちます。私は特に思考プロセスを説明したことが好きです(もし私が2番目の議決権行使をすることができれば)。しかし、私はまだ "arg"と "params"の価値とそこから渡された値について何か混乱しています。これは基本的なJavaScriptの理解の問題かもしれませんが、わかりません。 – hbhakhra

関連する問題