5

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

我想让数据在与 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);
    }
});
4

2 回答 2

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);
    }
});
于 2013-04-13T04:03:33.233 回答
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 调用失败的情况添加回调。

于 2013-04-12T20:57:57.153 回答