1

作成中のアプリにお気に入りを追加しようとしています。

基本的なセットアップには、「概念」のコレクションを持つユーザーが含まれます。テキスト フィールドを送信することで、コレクションに新しいコンセプトを提案できます。

ユーザーは、Gmail や他の何百万ものアプリとまったく同じように、小さな星をクリックしてコンセプトを「お気に入り」にすることもできます。お気に入りのコンセプトはコンセプト コレクションの一番上に固定され、新しく作成されたコンセプトはその下に表示されます。

コンセプトをお気に入りにするには、コンセプトの ID を に POST する必要があり"/favourites"ます。

class ConceptView extends Backbone.View
  events:
    'click .empty-star' : 'favourite'

  favourite: ->
    @model.favourite()

class Concept extends Backbone.Model
  favourite: ->
    $.post("/favourites", { concept_id: @id }, "json")

私の質問は、クライアント側でお気に入りのコンセプトとお気に入りでないコンセプトを管理する方法についてです。

お気に入りのコンセプト用とそうでないコンセプト用の 2 つの別個のコレクションを作成する必要がありますか? それとも、1 つのコレクションに固執する必要がありますか?

コレクションにConceptモデルがあるとしたらFavouritedConcepts

class FavouritedConcepts extends Backbone.Collection
  url: "/favourited_concetpts"
  model: Concept

favourited_concepts#index がお気に入りの概念のみにスコープを設定するのは自然なことなので、そのコレクションを介して概念をうまくリストできます。

ただし、概念はConceptsControlleratによって破棄され、コレクション内にある でBackbone"/concepts"を呼び出そうとすると、誤って にリクエストが送信されます。model.destroy()ConceptFavouritedConceptsDELETE"/favourited_concepts"

解決策は、1 つのコンセプト コレクションだけに固執し、favouriteブール属性を各コンセプトにマッシュアップし、コンパレーターを定義して、お気に入りのコンセプトをリストの一番上に固定することです。ただし、これを行うとビューレイヤーの柔軟性が失われる気がします。FavouritedConcepsコレクションからのイベントをリッスンするビューを持つことはできません。

この機能を実装する際に取るべき最善のアプローチは何ですか?

4

1 に答える 1

0

私は、好意を示すためにブールフラグが付いた1つのコレクションに固執します。これにより、コレクション間の適切な状態を確保するためのすべてのハウスキーピングが節約されます。

Conceptsからのイベントにバインドされているビューにリスナーを実装することもできます。コールバックでconcept.favouriteチェックを実行する必要があります。

于 2012-05-01T19:25:02.577 に答える