我正在构建带有主干和升沉问题的文件浏览器,并保存了已获取的集合。服务器的JSON响应被触发,如下所示:
[{ “名称”: “ ”“ 类型 ”:“ d ”},{“ 名称 ”:“ .. ”“ 类型 ”:“ d ”},{“ 名称 ”:“ 螺栓”, “类型”: “d”},{ “名称”: “CRM”, “类型”: “d”},{ “名称”: “crm_backup”, “类型”: “d”},{ “名称”: “parse.php”, “类型”: “F”},{ “名称”: “places.txt”, “类型”: “F”},{ “名称”: “pyrocms”, “类型”:“d “},{” 名称 “:” test.php的 “ ”类型“: ”F“},{ ”名称“: ”time_test.php“, ”类型“: ”F“},{ ”名称“:” 的wordpress ”, “类型”: “d”}]
我已经在我的收藏中检查了解析,它有11个元素。但是当我输出我的收藏时它是空的。这是集合代码:
var File = Backbone.Model.extend({
defaults: {
'name': '',
'type': 'f'
}
});
var FilesCollection = Backbone.Collection.extend({
model: File,
url: '<?php echo site_url('files/dir/'); ?>',
parse: function(response) {
console.log("In prase " + response.length);
return response[0];
}
});
var files = new FilesCollection();
files.fetch({data: {dir: '/home/stamp/public_html/'}}, {rest: true});
console.log(JSON.stringify(files));
答案 0 :(得分:1)
fetch
是异步功能。您应该在console.log
的{{1}}处理程序中调用success
,以便在加载数据后可以看到输出。
fetch
BTW,根据doc,file.fetch({
success: function() {
console.log(...);
},
...
})
应该只将1个参数作为哈希:
collection.fetch([options])
答案 1 :(得分:0)
来自fine manual:
解析
collection.parse(response, options)
[...]函数传递原始
response
对象,并应返回要添加到集合中的模型属性数组。
看起来您的response
正好是您的收藏品想要看到的对象数组,但您要返回一个对象:
return response[0];
该集合将寻找一个数组,找不到一个,结果就是你的fetch
调用什么都不做。您的parse
应该按原样返回整个response
:
return response;
或者,如果您不需要它进行调试,只需从集合中删除parse
方法,默认实现应该足以满足您的需求。