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

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

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

投票是所有用户的所有投票的集合。用户必须能够获取所有民意调查,而不管他们属于哪个用户(可以正常工作),并且他还应该能够只获取属于他们的民意调查。

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/ 其中 returns 与特定用户相关的投票。

在全局范围内创建一个指向 /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 自行过滤的方法。

但在这种情况下,您要么必须在过滤前缓存民意调查,要么在应用过滤器后需要时再次获取所有民意调查。