0

我正在构建带有主干的文件浏览器,并在保存获取的集合时遇到问题。来自服务器的 JSON 响应被触发,如下所示:

[{"name":".","type":"d"},{"name":"..","type":"d"},{"name":"bolt","type" :"d"},{"name":"crm","type":"d"},{"name":"crm_backup","type":"d"},{"name":"解析。 php","type":"f"},{"name":"places.txt","type":"f"},{"name":"pyrocms","type":"d"}, {"name":"test.php","type":"f"},{"name":"time_test.php","type":"f"},{"name":"wordpress","类型":"d"}]

我在我的收藏中检查了 parse ,它有 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));
4

2 回答 2

1

fetch异步函数。您应该调用处理程序,以便console.log在加载数据后可以看到输出。successfetch

file.fetch({
    success: function() {
        console.log(...);
    },
    ...
})

顺便说一句,根据docFetch应该只将 1 个参数作为散列:

collection.fetch([选项])

于 2013-05-21T06:33:47.697 回答
0

来自精美手册

解析 collection.parse(response, options)

[...]该函数传递原始response对象,并应返回要添加到集合中的模型属性数组。

看起来您response的正是您的集合想要查看的对象数组,但您返回的是单个对象:

return response[0];

该集合将寻找一个数组,但找不到,结果是您的fetch调用什么也不做。您parse可能应该按原样返回整个response内容:

return response;

或者,如果您不需要它进行调试,只需parse从您的集合中删除该方法,默认实现应该足以满足您的需要。

于 2013-05-21T06:26:07.633 回答