2

Angular コントローラーとディレクティブの基本的な機能は理解していますが、使用する Dynatree ツリー ウィジェットをラップするためにそれらをどのように適用するのが最善かを理解するのに苦労しています。

問題は、通常、Dynatree には ajax を介してデータを取得し、それ自体を設定する独自の手段があることです。通常、これは、「appendAjax」メソッドを呼び出して特定のツリー ノードにデータを追加することで行います。つまり、すべて 1 つの操作です。

Ajax メソッドへの呼び出しを分離し、これをコントローラーに配置して、独自のツリー オブジェクトに ajax 呼び出しの結果を格納できることを知っています。その後、ディレクティブでそのツリー オブジェクトへの変更を監視し、Dynatree ウィジェットを手動で更新できます。 . しかし、私が扱っているツリー データは大きくて複雑であり、dynatree が既に独自のツリー構造を持っている場合、コントローラーで独自のツリー構造を維持する必要があるのはかなり非効率的です。

この場合、コントローラーは本当に必要ないので、代わりにダイナツリーをディレクティブ内にラップして、基本的にこれまでと同じように使用し続けることができますが、これは機能しないようです-そしてこれおそらく、ディレクティブに関するAngularの知識が不足している場所です。だから私はいくつかの質問があります:

1]ディレクティブ内で何らかの種類のajax呼び出しを行うことは悪い習慣と見なされますか?

2] もしそうなら、特定の方法で物事を行うのが好きなこのサードパーティのコントロールをどのようにラップすればよいですか?コントローラーで独自の複製ツリー構造を維持する必要がありますか?

3] ディレクティブで Ajax 呼び出しを行っても問題ないと判断された場合、ディレクティブで ajax メソッドが確実に実行されるようにするにはどうすればよいですか? (これが私の問題の原因だと思います)

4

3 に答える 3

2

少しでもお役に立てれば、hawtio で jquery dynatreeを AngularJS ディレクティブとしてラップするために使用しているディレクティブを次に示します。

ソース コードは次のとおりです(TypeScript ですが、大部分は JavaScript です)。

于 2013-04-10T14:40:04.083 に答える
0

1]ディレクティブ内で何らかの種類のajax呼び出しを行うことは悪い習慣と見なされますか?

私はそうは思わない。その場合、Angular には、Ajax 呼び出しを含む任意のコードを追加できる「コントローラー」プロパティがありません。ここで私のブログ投稿を参照してください http://theocdcoder.com/guide-angularjs-directives-part/

2]もしそうなら、特定の方法で物事を行うのが好きなこのサードパーティコントロールをどのようにラップすればよいですか? コントローラーで独自の複製ツリー構造を維持する必要は本当にありますか?

Ajax 呼び出しをラップするサービスを作成し、link メソッドからサービスを呼び出すのが最善の方法だと思います。その前に、リンク関数で JQuery/Javascript コードを介してダイナツリーを初期化する必要があります。リンク関数内に存在するダイナツリー イベントにイベント リスナーを追加します。これらのイベント リスナー内で、さらに Ajax 呼び出しを行うか、必要に応じて dom を変更します。$attr.$observe または $scope.$watch を追加して、外部からの変更をリッスンすることもできます。$scope.$broadcast を使用して親コントローラーと通信するか、スコープ バインディングと通信してコントローラー関数へのメソッドを呼び出します。

3] ディレクティブで Ajax 呼び出しを行っても問題ないと判断された場合、ディレクティブで ajax メソッドが確実に実行されるようにするにはどうすればよいですか? (これが私の問題の原因だと思います)。例については、私のブログ投稿を参照してください。

より明確にするために JSFiddle を投稿できます。

于 2013-03-27T02:51:45.613 に答える