1

尝试使用主干集合初始化抓取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/

4

1 回答 1

1

您需要先确保这些工作正常

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

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

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

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

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

更新

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

注意:只有在从您要构建模型集合的服务器发送自定义响应时,才必须显式编写解析

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

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

这行不通。例如,您应该在集合本身之外使用集合

var col = Backbone.Collection.extend({url:"data.json"});
var instance = new col({model:Tweet});
instance.fetch();
于 2012-05-03T08:37:07.820 回答