【问题标题】:Fetch Backbone Collection by Model IDs list按模型 ID 列表获取主干集合
【发布时间】:2012-11-21 10:45:33
【问题描述】:

我有一个服务于几个 URL 的 REST API:

/rest/messages

提供所有消息。消息是 JSON/Backbone 模型

{ 
  title: 'foo',
  body : 'bar'
}

要获得一条消息,我有:

/rest/messages/:id

是否可以使用消息 ID 数组获取主干集合?我不想要整个消息列表,只想要我按 ID 指定的几条消息。

我可以一个接一个地获取模型并填充集合,但我想知道 Backbone 是否有更简洁的方法来执行此操作。 谢谢

【问题讨论】:

    标签: javascript rest backbone.js


    【解决方案1】:

    根据documentation,您可以将ajax 选项传递给fetch 调用。因此,您可以将 ids 作为 data 属性传递给正在完成的 fetch 调用,并基于它从服务器返回相应的模型。

    例如(在获取时),

    collection.fetch({
      data : {
        message_ids : [1, 3, 5] // array of the message ids you want to retrieve as models
      }
    })
    

    这个message_id 数组可以在/rest/messages 执行的服务器代码中以parameters(不确定您的情况的名称)的形式访问,从那里您可以只返回基于您收到的ID 的特定模型message_ids。您唯一需要的是,客户端必须知道它需要的所有消息模型的 ID。

    您可以使用任何数据结构而不是数组来发送 message_ids。

    【讨论】:

      【解决方案2】:

      集合的 url 属性引用服务器上的集合位置。当您使用 fetch 时,主干使用该 url。
      url 属性也可以是返回 url 的函数。所以你可以这样做:

      var ids = [1,2,3]
      var messages = new MessegecCollection();
      messages.url = function() {
          return "/rest/messages/"+ids.join("-"); //results "/rest/messages/1-2-3"
      }
      messages.fetch();
      

      您还可以在您的集合中创建一个方法来生成和设置 url,甚至获取一组模型。
      现在你所要做的就是支持这个url:/rest/messages/1-2-3

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 2013-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多