Backbone fetch collection但它不会保存

时间:2013-05-21 06:15:29

标签: backbone.js

我正在构建带有主干和升沉问题的文件浏览器,并保存了已获取的集合。服务器的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));

2 个答案:

答案 0 :(得分:1)

fetch是异步功能。您应该在console.log的{​​{1}}处理程序中调用success,以便在加载数据后可以看到输出。

fetch

BTW,根据docfile.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方法,默认实现应该足以满足您的需求。