1

ユーザーがセット { A, B, C } から 1 つの div を選択し、それを div X に追加するとします。ただし、各 div には、アプリケーションの状態と各 div の固有のプロパティに依存する可能性のある異なるルールがあります。最後に div を追加すると、各 div が異なるイベントをトリガーする場合があります。

たとえば、あるアプリケーションの状態では、ユーザーは次のようになります。

A を X に追加してみてください: A が X に追加され、他に何も起こりません

B を X に追加してみてください: B が X に追加され、追加のイベントがトリガーされます

C を X に追加してみてください: 許可されていません。C は定義された元の状態に戻ります (たとえば、ドラッグ アンド ドロップで C を X に追加しようとすると、C は元の位置に戻ります)。

3 つの div すべてが既にレンダリングされており、それぞれに 1 つのモデル、ビュー、およびコントローラーが存在するとします。

このプロセスで見られるロジックの断片と、それを配置する場所を自由に教えてください。しかし、答えてください:

  1. 検証プロセスはコントローラ レイヤ、またはモデル レイヤのどこかに配置する必要があります。
  2. 検証が完了すると、1 つのメディエーター オブジェクトがモデルとビューを呼び出して新しい子を追加するか、モデルが子を追加し、何らかの方法でビューをトリガーして同じことを行う必要があります。
  3. コントローラーは、dom とモデルの階層関係を認識する必要があります

Ember.js でこんな感じの実装をしているのですが、使っていない・聞いたことがないという方でもいいので回答お願いします。

4

1 に答える 1

3

ビューにドラッグ アンド ドロップ アクションを実装する必要があります。アイテムがドロップされると、ルーターに送信されるアクションがトリガーされます。ルーター (アプリのステート マシンとして機能) は、現在の状態に基づいてアクションに適切に応答する必要があります。適切なアクションの決定は、完全に状態ベースにすることも、モデルまたはコントローラーの側面を考慮に入れることもできます。

アクションはモデルやコントローラーを操作する必要があり、ビューレイヤーのバインディング/オブザーバーは、ビューをモデル/コントローラーの新しい状態と同期させる必要があります。

コントローラーは DOM を認識するべきではありません。

それが役立つことを願っています! 責任の分担については、こちらのプレゼンテーションで説明しています: http://www.lukemelia.com/blog/archives/2012/08/23/architecting-ember-js-apps/

于 2012-11-27T06:02:13.777 に答える