如何让Backbone.ajax返回成功数据

时间:2013-04-12 20:48:21

标签: javascript json backbone.js

我试图让Backbone.ajax返回集合“集合”。我需要在程序的另一部分中使用Model。

我想使数据与ajax方法在同一级别上可用。

Backbone.ajax({
    dataType: "jsonp",
    url: "https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=twitterapi&count=25",
    data: "",
    success: function(val){ val
        var Model = Backbone.Model.extend({});
        var Collection = Backbone.Collection.extend({
            model:Model
        });
        collection = new Collection(val);
        console.log(collection);
    }
});

2 个答案:

答案 0 :(得分:12)

不要!您的连接的存在几乎永远不会取决于任何“ajax”调用!您需要在ajax调用之前的某个位置移动集合的定义和实例,然后在ajax调用之前的某个位置移动集合的定义和实例,然后在成功方法或类似的东西中仅移动resetadd集合。您需要外部它,以便您可以在实际需要数据之前定义所有视图绑定等;否则你最终会陷入一团糟 - 你正试图通过使用Backbone 避免

//definitions
var MyModel = Backbone.Model.extend({});
var MyCollection = Backbone.Collection.extend({
    model:Model
});

//wherever you need a collection instance
collection = new MyCollection();

//wherever you need to do the ajax
Backbone.ajax({
    dataType: "jsonp",
    url: "https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=twitterapi&count=25",
    data: "",
    success: function(val){
        collection.add(val);  //or reset
        console.log(collection);
    }
});

答案 1 :(得分:3)

您可以像这样对函数应用回调:

function ajaxCall(callback) {
  Backbone.ajax({
    dataType: "jsonp",
    url: "https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=twitterapi&count=25",
    data: "",
    success: function (val) {
      var Model = Backbone.Model.extend({});
      var Collection = Backbone.Collection.extend({
        model: Model
      });
      collection = new Collection(val);
      callback(collection);
    }
  });
}

ajaxcall(function (collection) {
  //do something with the collection when the callback is returned
});

执行该函数时,它将等待回调执行函数内的任何内容。因此,我建议您为AJAX调用失败的情况添加回调。