2013-04-12 16 views
5

Koleksiyon "koleksiyon" döndürmek için Backbone.ajax almaya çalışıyorum. Modele programın başka bir bölümünde ihtiyacım var.Backbone veri dönüşü için Backbone.ajax nasıl elde edilir

Verileri ajax yöntemi ile aynı düzeyde kullanılabilir hale getirmek istiyorum.

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

cevap

12

Noooo! Bağlantınızın varlığı, hiçbir zaman herhangi bir "ajax" çağrısına bağlı olmamalıdır! Koleksiyonun tanımını ve örneğini ajax başarı yönteminizin dışında ve ajax çağrısından önce bir yere taşımanız gerekir, ve daha sonra sadece reset veya add koleksiyondaki başarı yöntemi veya benzer bir şey. Veriye ihtiyacınız olana kadar, tüm görünüm bağlarınızı vb. Tanımlayabilmeniz için dışarıdan ihtiyacınız var; Aksi halde büyük bir karmaşaya sahip olursunuz - Backbone'u kullanarak numaralı telefonu'dan kaçının.

//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

Çok teşekkürler, bu gerçekten iyi çalıştı. – Jason

3

Öyle gibi işleve bir geri arama uygulayabilirsiniz: fonksiyon yürütüldüğünde geri arama işlevi içinde bir şey yürütmek için, bu bekleyecektir

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

. Bu nedenle, AJAX çağrısının başarısız olduğu durum için bir geri arama eklemenizi öneririm.

İlgili konular