【问题标题】:Fetching different set of models using same type of collection in Backbone在 Backbone 中使用相同类型的集合获取不同的模型集
【发布时间】:2015-12-13 07:39:47
【问题描述】:

我有一个服务器响应,它返回用户的 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
     }]
 });

【问题讨论】:

    标签: javascript backbone.js backbone-routing backbone.js-collections backbone-model


    【解决方案1】:

    如果我理解正确,您还需要一个这样的 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 过滤自身的方法。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多