在 Backbone 中使用相同类型的集合获取不同的模型集

Fetching different set of models using same type of collection in Backbone

本文关键字:获取 集合 模型 同类型 Backbone      更新时间:2023-09-26

我有一个服务器响应,返回用户的 ID、电子邮件和属于该用户的轮询 ID 数组。我正在尝试获取属于特定用户的所有民意调查的文本。我尝试将 ajax 选项传递给获取调用,但所有民意调查都被获取,而不仅仅是该用户的民意调查。

投票

是所有用户的所有投票的集合。用户必须能够获取所有民意调查,无论他们属于哪个用户(工作正常(,并且他还应该能够仅获取属于他们的民意调查。

用于从所有用户获取所有投票的 API:/api/polls

用于获取单个轮询的 API:/api/polls/:poll_id

是否可以按 ID 获取多个 Backbone 模型,而无需为每个模型执行单独的获取请求?

 var polls = new Polls();
 polls.fetch({
     traditional: true,
     data: {
         poll_ids: idsArr
     }
 });
 Background Code:
     var UserSchema = new Schema({
         name: String,
         email: {
             type: String,
             required: true,
             index: {
                 unique: true
             }
         },
         polls: [{
             type: Schema.Types.ObjectId,
             ref: 'Poll'
         }]
     });
 var PollSchema = new Schema({
     name: String,
     options: [{
         text: String
     }]
 });
如果我

理解正确,您还需要一个这样的 API:/api/:user_id/polls/ 它返回与特定用户相关的民意调查。

全局创建一个指向/api/polls的轮询集合,并在用户模型中创建另一个指向/api/:user_id/polls/的轮询集合

var Poll = Backbone.Model.extend({
  urlRoot: '/api/polls'
});
var Polls = Backbone.Collection.extend({
  model: Poll
});
var User = Backbone.Model.extend({
  initialize: function() {},
  parse: function(response) {
    this.polls = new Polls(response.usersPolls, {
      url: '/api/'+ this.id +'/polls/'
    });
    /*remove polls info if not needed*/
    return response;
  }
});
var allPolls = new Polls(null, {url:'/api/polls/'})
用户

模型内的集合将获取与用户相关的民意调查,另一个集合将包含所有民意调查。

应将轮询模型的 urlRoot 属性设置为 /api/polls/,以便它们的 url 将像/api/polls/:poll_id一样正确形成,而不是在用户特定的轮询集合中/api/:user_id/polls/:poll_id

<小时 />

另一种选择是完全在客户端处理这个问题,方法是使用单个集合来获取所有轮询,该集合具有接受用户 id 并根据 id 过滤自身的方法。

但在这种情况下,您要么必须在过滤之前缓存投票,要么在应用过滤器后在需要时再次获取所有轮询。