2013-08-22 33 views
10

Belirli bir kullanıcı için geçerli modeli getirecek omurga modelimde bir varyant getirme yöntemi oluşturmaya çalışıyorum. Bu, /api/mealplans/owner/{username}/current numaralı API'dan edinilebilir.Backbone.js özel getirme URL'si ile

Aşağıdaki modeli yazdım. Prototype getirme çağrısı sadece urlRoot kullanıyordu ve URL'lerin bir şekilde porsiyonlarda geçirilen URL parametresini geçersiz kılıp kılmadığını görmek istediğim için URL Kökünü açıkladım. Bunun hiç backbone.js use different urls for model save and fetch itibariyle diğer yerlerde, bazı varyasyonları, yapılan gördüğüm

var mealPlan = Backbone.Model.extend({ 
    name: 'Meal Plan', 
    //urlRoot: '/api/mealplans', 
    defaults: {}, 
    fetchCurrent: function (username, attributes, options) { 
    attributes = attributes || {}; 
    options = options || {}; 
    if (options.url === undefined) { 
     options.url = "/api/mealplans/owner/" + username + "/current"; 
    } 
    return Backbone.Model.prototype.fetch.call(this, attributes, options); 
    }, 
    validate: function (attributes) { 
    // To be done 
    return null; 
    } 
}); 

- Bu durumda kod biraz farklıdır (O ile başlayan ve benim için daha kolay hale getirmek için bunu bozuldu read.)

Seçenekler nesnesinin, URL'yi almak için ilettiğimde URL parametresine sahip olduğu görünmüyor, ancak sonra görmezden geliyor gibi görünüyor!

cevap

14

Kaydetmek üzere getirilecek aynı parametreleri varsayıyordum - Bu durum böyle değil.

YALNIZ almak için yöntem imzası 'öznitelikleri' değil, 'seçenekleri' alır, bu nedenle URL parametresi bulunamadı.

modeli kod Bunun gibi daha bir ifade olmalıdır ..

var mealPlan = Ministry.Model.extend({ 

     name: 'Meal Plan', 
     urlRoot: '/api/mealplans', 

     defaults: { 
     }, 

     fetchCurrent: function (username, options) { 
      options = options || {}; 
      if (options.url === undefined) { 
       options.url = this.urlRoot + "/owner/" + username + "/current"; 
      } 

      return Backbone.Model.prototype.fetch.call(this, options); 
     }, 

     validate: function (attributes) { 
      // To be done 
      return null; 
     } 
    }); 
+1

Ben gerçekten 100 konu arandı Bu cevap için s, sorular ve mesajlar! çok teşekkür ederim! –

+1

Endişelenme - Her zaman, kendim için durumumun farkına varırsam, gönderdiğim soruları yanıtlamaya çalışıyorum. Cevapsız online gönderilerle zaman zaman deliriyorum. –

1

Ben, url() yöntemini geçersiz aşağıda gibi daha iyi olduğunu düşünüyorum: sizin örnekte,

var mealPlan = Ministry.Model.extend({ 

    name: 'Meal Plan', 
    urlRoot: '/api/mealplans', 

    //--> this gets called each time fetch() builds its url 
    url: function() { 
     //call the parent url() 
     var url=Backbone.Model.prototype.url.call(this); 
     //here you can transform the url the way you need 
     url += "?code=xxxx"; 
     return url; 
    } 
... 

yanında yukarıda bir hata olduğunu düşünüyorum ve fetchCurrent yerine getirme

+0

Geçersiz kılmada URL'den bahsedilmeli midir? Kökün "? Code = xxxx" dizesine nasıl eklendiği açık değildir. Belki 'var url = Backbone.Model.prototype.urlRoot.call (this);' –

+0

Hayır, Model bir yöntemdir. doğru yol url.call(). Kaynak koduna bakarsanız, uygun niteliğin alındığını görürsünüz: http://backbonejs.org/docs/backbone.html – Nadir

İlgili konular