2013-08-22 10 views
10

के साथ Backbone.js मैं अपने रीढ़ की हड्डी मॉडल पर एक संस्करण लाने की कोशिश कर रहा हूं जो किसी दिए गए उपयोगकर्ता के लिए वर्तमान मॉडल लाएगा। यह /api/mealplans/owner/{username}/current पर एपीआई से उपलब्ध है।कस्टम fetch यूआरएल

मैंने निम्नलिखित मॉडल लिखा है। मैंने यूआरएल रूट पर टिप्पणी की, क्योंकि प्रोटोटाइप फ़ेच कॉल बस urlRoot का उपयोग कर रहा था और मैं देखना चाहता था कि वह किसी भी तरह से भागों में पारित यूआरएल पैरामीटर को ओवरराइड कर रहा था या नहीं।

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

मैं इस, किया इस तरह के backbone.js use different urls for model save and fetch में के रूप में अन्य स्थानों में कुछ रूपों में देखा है - उस मामले में कोड थोड़ा अलग है (मुझे लगता है कि के साथ शुरू किया और यह खराब हो गई यह करने के लिए मेरे लिए आसान बनाने के लिए पढ़ें।)

विकल्प ऑब्जेक्ट में यूआरएल पैरामीटर ठीक है जब मैं इसे लाने के लिए पास करता हूं, लेकिन फिर यह इसे अनदेखा करता है!

उत्तर

14

मैं सहेजने के लिए लाने के लिए समान पैरामीटर मान रहा था - ऐसा नहीं है।

लाने के लिए विधि हस्ताक्षर केवल 'विकल्प' लेता है और 'गुण' नहीं, इसलिए यूआरएल पैरामीटर नहीं मिला था।

मॉडल कोड इस तरह अधिक एक सा दिखना चाहिए ..

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

मैंने सचमुच 100 विषय खोजा इस उत्तर के लिए प्रश्न, प्रश्न और पोस्ट! आपको बहुत - बहुत धन्यवाद! –

+1

कोई चिंता नहीं - मैं हमेशा अपने प्रश्नों का उत्तर देने का प्रयास करता हूं यदि मैं खुद के लिए खुद को ढूंढता हूं। मैं कई बार अनुत्तरित ऑनलाइन पोस्ट के माध्यम से खोदने के लिए पागल हो जाते हैं। –

1

मुझे लगता है कि, यूआरएल() विधि ओवरराइड नीचे की तरह बेहतर है:

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

अलावा अपने उदाहरण में, ऊपर मुझे लगता है कि एक गलती है और आपको fetchCurrentfetch

+0

क्या ओवरराइड में urlRoot का उल्लेख किया जाना चाहिए? यह स्पष्ट नहीं है कि रूट को "कोड = xxxx" स्ट्रिंग में कैसे प्रस्तुत किया जाता है। हो सकता है कि 'var url = Backbone.Model.prototype.urlRoot.call (यह); ' –

+0

नहीं, यह मॉडल से एक विधि है। सही तरीका url.call() है। यदि आप स्रोत कोड देखते हैं तो आपको उचित विशेषता दिखाई देगी: http://backbonejs.org/docs/backbone.html – Nadir

संबंधित मुद्दे