在 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 自行过滤的方法。
但在这种情况下,您要么必须在过滤前缓存民意调查,要么在应用过滤器后需要时再次获取所有民意调查。
我有一个服务器响应 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 自行过滤的方法。
但在这种情况下,您要么必须在过滤前缓存民意调查,要么在应用过滤器后需要时再次获取所有民意调查。