0

それぞれに「いいね」ボタンが付いた画像のリストがあります。「いいね」ボタンがクリックされると、AJAX リクエスト (item_idとを含む) がサーバー側に送信され、いいねを記録します (テーブルにとの値を持つuser_id新しい行を追加することによって)。likesitem_iduser_id

モデルPhotoは、ページに表示される画像に使用されます。私の理解が正しければ、this.model.save()を更新/追加する場合に使用されるため、「いいね」Photoの記録には適していません。$.get()したがって、またはのようなものを使用する必要があり$.post()ます。これが従来の方法ですか?

または、以下に示すように新しいモデルを作成する必要Likeがあります。これにより、[いいね] ボタンのためだけにビューとテンプレートを使用するのが面倒になるようです。

Like = Backbone.Model.extend({
    url: 'likes'
});

LikeView = Backbone.View.extend({

    template: _.template( $('#tpl-like').html() ),

    events: {
        'click .btn_like': 'like'
    },

    like: function() {
        this.model.save({
            user_id: 1234,
            post_id: 10000
        })
    }
});
4

1 に答える 1

0

これと同様のケースで$.get、新しいモデルを作成するのではなくメソッドを使用しました。明らかにこれはアプリケーションによって異なりますが、これが私の理由です。

このケースには、次の特徴があるようです。

  1. Like人と写真の関係です、
  2. 写真とユーザーIDを受け入れてこの関係をすでに作成しているサーバー側のリソースがあるようですが、
  3. あなたはおそらくその関係に付随する他の情報を持っていません、そして
  4. あなたはおそらくそれ自体と一緒に行くための重要なビューロジックを持っていません

これは、いいねの数を含む別の属性をPhotoオブジェクトに追加することでより適切に処理されます。次に、を使用$.getしてを作成しますlike。200の応答は、写真オブジェクトをその数(したがってビュー)まで更新するだけです。次に、サーバー側は、サーバー側が戻ってきたときに、その一部として同様のカウントを含める必要があります。

likeここでは、aが作成されると、それを更新しないと想定しています。更新または削除する必要がある場合でも、引き続き使用する可能性があり$.getます。各要素がリソースlikesのIDである配列を写真オブジェクトに追加できます。likeビューには配列の長さがカウントとして表示されます。同様のものを削除する必要がある場合は、IDにアクセスでき、を使用できます$.post.pushバックボーンのsetメソッドをバイパスし、イベントコールバックを取得しないため、配列に値を追加するためにを使用しないように注意してください。変更を加えるときは、配列のクローンを作成し、プッシュしてから設定する必要があります。

于 2012-07-21T16:19:50.240 に答える