骨干集合是否自动解析加载的数据

时间:2012-05-03 08:32:36

标签: javascript backbone.js

尝试使用主干集合来初始化抓取json数据,但结果是数据为空。 骨干集合是否会自动将json数据解析为模型,或者我们必须手动解析它?

 var Book = Backbone.Model.extend({
    title:"",
    isbn:"",
    img:""  
 });

 var Books = Backbone.Collection.extend({
    model:Book,
    url:'latest.json',
    // parse:function(data){
    //  console.log(data);
    // },       
    initialize: function(){
        this.fetch();
    }
 });

编辑添加到我的示例json中,我使用jsonlint.com进行验证。

[
    {"title":"American Pie","isbn":"345354356","img":"/image/pie.png"},
    {"title":"Long Tails","isbn":"567575576g","img":"/image/long_tails.png"},
    {"title":"Pirates","isbn":"567575765","img":"/image/pirates.png"}
]

在JSFiddle链接中添加。

http://jsfiddle.net/mochatony/5E3Nc/14/

1 个答案:

答案 0 :(得分:1)

您需要先确保这些工作

  • 没有脚本错误(在javascript控制台中检查它们)

  • Collection.fetch发出更正网址的请求(请参阅Chrome网络检查器中的资源部分)

  • 检查响应mime/type是否正确“application / json”,服务器确实提供JSON字符串

  • 确保JSON响应格式正确(我遇到了这个问题。它必须是数组而不是对象ex:[{},{},{},{}]

  • 最后从服务器刷新(清除缓存)

更新

这是一个演示使用http://jsfiddle.net/5E3Nc/16/

的JsFiddle

注意:只有在您要从中构建模型集合的服务器发送自定义响应时,才必须明确写入Parse

顺便说一句,我注意到你做了这个

initialize:function(){
  this.fetch();
}

这不起作用。您应该在集合本身之外使用该集合 例如

var col = Backbone.Collection.extend({url:"data.json"});
var instance = new col({model:Tweet});
instance.fetch();