Backbone集合未使用JSONP请求进行更新

时间:2013-02-10 11:54:20

标签: javascript ajax backbone.js jsonp brunch

我刚刚开始使用Backbone.js,我正在开发一个应用程序,现在使用Brunch对外部API执行JSONP请求以填充我的集合和模型。我正在关注以前的帖子(thisthis)关于使用Backbone执行JSONP请求,但由于某种原因,我的收藏仍然没有获取数据。

我的模型(app / models / model.js):

module.exports = Backbone.Model.extend({
});

我的收藏(app / models / collection.js):

var Post = require('./model');

module.exports = Backbone.Collection.extend({
    model: Post,
    url: "http://somedata.com/api/posts/list/stuff",
    sync: function(method, model, options) {  
        options.timeout = 10000;
        options.dataType = "jsonp";
        options.jsonp = "JSONPcallback";        
        return Backbone.sync(method, model, options);
    },
    parse: function(response) {
        if (response) {
            var parsed = [];
            for(var i = 0; i < response.results.length; i++) {
                parsed.push(response.results[i][0]);
            }

            return parsed;
        }
    }
});

然后,在app / application.js的initialize方法中,我通过以下方式调用它:

var Category = require('models/collection');
this.cat = new Category();
this.cat.fetch();

现在,当我查看console.log中的parse函数时,我看到正在获取的数据,因此请求成功完成。但是,当我的视图被呈现并且我在app / views / view.js中执行console.log(application.cat.models)时,我什么都没得到 - 为什么会发生这种情况?我的模型/集合上的代码有什么问题吗?

此外,JSONP数据具有以下格式,这就是为什么循环使用response.results [i] [0]并返回一个包含所有数据的数组,这应该可以解决问题,对吗?

{"results":[
  {"0":{"id":xxx,"title":xxx,"link":xxx},
   "description":xxx},
  {"0":{"id":xxx,"title":xxx,"link":xxx},
   "description":xxx},
  {"0":{"id":xxx,"title":xxx,"link":xxx},
   "description":xxx},...
]}

非常感谢任何帮助...

1 个答案:

答案 0 :(得分:2)

我在这里有2条评论:

  1. 我看到你的模型和集合的名称都是module.exports,通常的做法是将模型设置为单数(module.export)并为这些模型设置复数{{1通常的做法,没有“错误”,否则

  2. 您的代码中可以有2个回调,当收集完成取数据(异步事件)时也将module.exports视为您的集合,

  3. 一个。你可以这样做:

    module.exports

    B中。您可以从文档here获得module.exports.fetch({ success : function(data){ console.log(JSON.stringiy(data)); //do remaining programming here } }); 的事件侦听器,该集合在完成获取时会触发reset事件,因此可以在集合上添加事件侦听器,如下所示:

    reset