2013-04-12 11 views
5

Próbuję uzyskać Backbone.ajax do zwrotu kolekcji "kolekcji". Potrzebuję Modelu w innej części programu.Jak uzyskać Backbone.ajax do zwrócenia danych na temat sukcesu

Chciałbym udostępnić dane na tym samym poziomie, co metoda 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); 
    } 
}); 

Odpowiedz

12

Nieee! Istnienie twojego połączenia prawie nigdy nie powinno być zależne od inwokacji "ajaxowej"! Musisz przenieść definicję kolekcji i instancję poza metodę sukcesu ajax i gdzieś przed wywołaniem ajax, a następnie po prostu reset lub add kolekcję w ramach metody sukcesu lub coś podobnego. Potrzebujesz go zewnętrznego, abyś mógł zdefiniować wszystkie powiązania widoku, itp., Zanim faktycznie potrzebujesz danych; w przeciwnym razie pojawi się wielki bałagan - jeden, który próbujesz uniknąć za pomocą 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); 
    } 
}); 
+0

Dzięki temu działało bardzo dobrze. – Jason

3

można zastosować zwrotnego do funkcji tak:

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 
}); 

Gdy funkcja jest wykonywana, to czekać na wywołanie zwrotne do wykonania czegokolwiek wewnątrz funkcji. Dlatego sugeruję dodanie wywołania zwrotnego dla przypadku, w którym wywołanie AJAX nie działa.

Powiązane problemy