0

我有一个图像列表,每个图像都有一个“喜欢”按钮。单击“Like”按钮时,将向服务器端发送一个 AJAX 请求(包含item_idand )以记录 Like(通过在表中添加一个带有and值的新行)。user_idlikesitem_iduser_id

该模型Photo用于页面上显示的图像。如果我理解正确,this.model.save()如果我想更新/添加一个新的,则使用Photo它,因此它不适合记录“喜欢”。因此,我必须使用类似$.get()or的东西$.post()。这是传统的方式吗?

或者我是否创建一个名为Like如下所示的新模型,这似乎使仅针对 Like 按钮的 View 和模板变得更加混乱。

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. 您可能没有重要的视图逻辑可以与 like 本身一起使用

通过向您的 Photo 对象添加另一个属性(包含喜欢的数量)可以更好地处理此问题。然后使用$.get创建like, 和 200 响应将简单地更新照片对象以增加它的计数(以及视图)。然后服务器端只需要在返回时将点赞数作为其中的一部分。

我在这里假设一旦like制作了 a ,您将不会更新它。如果您确实需要更新或删除它,我可能仍会继续使用$.get. 您可以向您的照片对象添加一个likes数组,其中每个元素都是like资源的 id。视图会将数组的长度显示为计数,如果您需要删除类似的,您可以访问 id 并且可以使用$.post. 只要确保您不使用.push向数组添加值,因为这将绕过主干的 set 方法并且您不会获得事件回调。您需要克隆阵列,然后推送,然后在进行更改时设置它。

于 2012-07-21T16:19:50.240 回答