nic*_*las 16 javascript collections backbone.js
这看起来很明显,但我不知何故错过了......
你如何发送选项以及backbone.js集合fetch()?
或者,从更广泛的角度来看:我在服务器上有一个大型数据集,在这种情况下是消息,我想通过集合访问它.看到可能有数以千计的消息我不想简单地一次获取和存储所有消息,因此我的集合必须至少理解限制和偏移.更不用说查询过滤或排序列表了.
骨干系列甚至可以处理这个问题吗?
干杯
Kyl*_*ers 31
我一直在乱用Backbone几天,我不得不立即解决这个问题而且我看了这个解决方案,但我发现它很笨重.在阅读了一些更多的主干文档后,我发现你实际上可以覆盖fetch()方法中的任何jQuery.ajax选项.所以举个例子
Posts = Backbone.Collections.extend({
model: Post,
url: '/posts'
});
Run Code Online (Sandbox Code Playgroud)
现在,当你想调用fetch时,只需发送你想要的任何参数即可.例如
var posts = new Posts();
posts.fetch({ data: { page: 3, pagesize: 10, sort: 'asc' } });
Run Code Online (Sandbox Code Playgroud)
这将产生以下请求:
http://yourdomain/posts?page=3&pagesize=10&sort=asc
Run Code Online (Sandbox Code Playgroud)
无论如何,我知道你已经接受了答案,但希望这会对某人有所帮助.
请考虑此代码,在实例化集合时,您会传入偏移量,限制或排序的首选项.如果未提供首选项,则初始化采用默认值.然后url函数将这些附加到对服务器的调用中.此后,在处理来自服务器的响应时,您可能必须更新这些值(可能只是偏移量).
MessageList = Backbone.Collection.extend({
initialize: function(models, options) {
options || (options = {});
this.offset = options.offset || 0;
this.limit = options.limit || MessageList.DEFAULT_LIMIT;
this.sortBy = options.sortBy || MessageList.DEFAULT_SORTBY;
},
url: function() {
return '/messages?' +
'offset=' + encodeURIComponent(this.offset) + '&' +
'limit=' + encodeURIComponent(this.limit) + '&' +
'sort_by=' + encodeURIComponent(this.sortBy);
},
parse: function(response) {
// Parse models
// Parse offset, limit, sort by, etc
}
}, {
DEFAULT_LIMIT: 100,
DEFAULT_SORTBY: 'name_asc'
});
Run Code Online (Sandbox Code Playgroud)