我正在尝试将Backbone集合转换为Ampersand集合。这是我到目前为止所做的事情(我也在使用CommonJS从requirejs转换为webpack): 骨干收集:
define([ 'backbone', 'models/loneItem'], function( Backbone, LoneItem ) {
return Backbone.Collection.extend({
model: LoneItem,
urlRoot: '/deeply/nested/path/',
url: function() {
return this.urlRoot + this.options.id + '/';
},
initialize: function(models, options) {
this.options = options || {};
},
parse: function(response){
return response.arrayAttribute;
}
});
});
然后在视图中我会像这样实例化它:
...
var myCollection = new GroupOfItems( [], { id: 'someID' } );
myCollection.fetch();
然后会产生对/deeply/nested/path/someID/
的调用,在返回的数据中找到arrayAttribute
并将其内容转换为一组LoneItem模型,可由myCollection
访问。
对于Ampersand系列:
var Collection = require('ampersand-rest-collection');
var LoneItem = require('../models/LoneItem');
module.exports = Collection.extend({
model: LoneItem,
url: '/deeply/nested/path/',
parse: function(response){
return response.arrayAttribute;
}
});
它的观点:
...
var myCollection = new GroupOfItems();
myCollection.fetchById('someID');
返回的数据如下所示
{
"arrayAttribute": [
{"id": "stringID1", "title": "Title A"},
{"id": "stringID2", "title": "Title B"}
]
}
它会生成一个成功的XHR,但myCollection
只会成为一个具有单个成员的集合对象,该成员具有LoneItem
的默认道具。问题是返回的数据在响应的根级别上没有设置id
属性吗?或者我缺少的Backbone和Ampersand集合实现之间有什么区别吗?
答案 0 :(得分:1)
原来我不应该偏离原来的实施:
var Collection = require('ampersand-rest-collection');
var LoneItem = require('../models/LoneItem');
module.exports = Collection.extend({
model: LoneItem,
urlRoot: '/deeply/nested/path/',
url: function() {
return this.urlRoot + this.options.id + '/';
},
initialize: function(models, options) {
this.options = options || {};
},
parse: function(response){
return response.arrayAttribute;
}
});
从视图:
var myCollection = new GroupOfItems([], {id: 'someID'});
myCollection.fetch();
换句话说,我所要做的只是将Backbone.Collection更改为Ampersand就是这样。
fetchById
旨在通过单独的REST调用来获取集合的成员。