3

表示/編集する必要があるデータがあり、Marionette が提供する組み込みのビューに自然に適合しないようです。説明のために例を挙げましょう。

本をリスト/編集したいとします。各書籍には、1 つの ISBN、1 つのタイトル、および 0 個以上のタグがあります。基本的に、情報の表示は表形式になります (タグの下の各単語は個別のタグであり、個別に編集/削除できます)。

+---------+----------------+-----------------------------+
|ISBN     |Title           |Tags                         |
+=========+================+=============================+
|12345678 |My Last Summer  |vacation diary kids          |
+---------+----------------+-----------------------------+
|12354389 |The Day After   |fiction future               |
+---------+----------------+-----------------------------+

書籍ごとにタグが 1 つしかない場合、CompositeView/ItemView は非常にうまく機能します。私が考えているのは、各行の最後のセルに領域を動的に作成し、CompositeView/ItemView を使用してタグのリストを処理することです。おそらくこれはやり過ぎであり、テンプレートにある種のイテレータを含めることをお勧めします。

タグをキャプチャして、特定の本のタグのリストを 1 つの文字列に入力することを考えました。バックエンドから受け取ったデータを操作し、タグのリストを 1 つのデータ要素にして、CompositeView/ItemView を使用して単純なテーブルとして処理できるようにすることで、これを行うことができます。これにより、追加の「マッピング」が導入され、「編集」ビューの実装がさらに複雑になります。

だから私は、人々がこの種の要件にぶつかったかどうか、そしてマリオネットでうまく機能するアプローチは何かを知りたいと思っていました. ありがとう。

4

1 に答える 1

5

すでに発見したように、これを機能させるにはさまざまな方法があります。それぞれのオプションは、特定の一連の状況により適していますが、目的を達成するための「最善の」方法がないような状況である可能性もあります。その場合は、いずれかを選択して先に進みます。:)

タグを単一の値にマップする

これはあなたがすでに提案したものです。タグの数が比較的少なく、誰かが特定のタグをクリックしたときにカスタム アクションを実行する必要がない場合に適しています。たとえば、各タグを<a href="#{tag-name}">リンクとして設定するだけの場合、単純な配列にマップされたタグを使用して簡単にこれを行うことができます。

テンプレートでタグ コレクションを繰り返す

基本的にマッピング オプションと同じですが、タグを文字列の単純な配列に減らす代わりに、テンプレート内のタグ コレクションをモデルとして反復し、データを取得するために model.get(...) を呼び出します。あなたが必要です。

Handlebars のようなテンプレート エンジンを使用している場合、これは非常に簡単になり、サブテンプレートを使用することでよりクリーンな結果が得られる可能性があります。

ただし、繰り返しを行うと、アンダースコアテンプレートは濁って醜くなる傾向があるため、このアプローチはおそらくお勧めしません。

レイアウトを使用した CllectionViews の CollectionView

これはより複雑なオプションですが、最も機能的でもあります。

itemView書籍のコレクションをレイアウトとして構成します。レイアウトには単一の領域があり、その領域には別のコレクションビューが取り込まれ、個々のタグがそれぞれレンダリングされます。

ここでの利点は、レンダリングされる個々のタグに関連付けられた、より多くのコードと機能を持つことができることです。タグごとに 1 つのビュー インスタンスが用意されるため、コードをカプセル化して整理しやすくなります。

欠点は、すべてのタグに対してビュー インスタンスが必要になることと、これをセットアップして実行するためだけに記述するコードが増えることです。

CompositeViews の CollectionView

複合ビューを使用すると、コレクションの周りにラッパー テンプレートをレンダリングできます。これは、CollectionView よりも有利な場合があります。

それでもCollectionViewが必要です。この CollectionView は CompositeView をそのままレンダリングしますitemView。CompositeView はitemViewContainer、タグのコレクションをレンダリングするために を指定します。各タグは独自のビュー インスタンスを取得します。

この方法でレイアウトとリージョンを取り除くことができます。視覚的な結果は、Layouts で CollectionView を使用する場合と同じですが、それを行うコードの量はおそらく大幅に削減されます。


個人的には、map/reduce を実行してタグを単純な配列にするか、CompositeViews の CollectionView を使用します。

于 2012-11-02T13:25:55.700 に答える