2012-09-20 15 views
8

मैं पैरामीटर के साथ विशिष्ट यूआरएल से मॉडल लाने के लिए करना चाहते हैं: यूआरएल: सर्वर/somecontroller/आईडी/type = उपहारBackbone.js मॉडल में URL पैरामीटर सेट और का उपयोग यह लाने करने के साथ

सरल काम कर रहे तरीका है:

collection.fetch({ data: { type: 'gift'} }); 

लेकिन मैं मॉडल में यह निर्धारित करना चाहते हैं:

... 
    if(id){ 
     App.coupon = new AffiliatesApp.Coupon({id: id}); 
    } else { 
     App.coupon = new AffiliatesApp.Coupon({id: 'somecontroller'}, {type: 'gift'}); 
    } 
    App.coupon.fetch(); 

मैं इसे कैसे हासिल कर सकते हैं?

उत्तर

8

यह प्राप्त करने का सबसे आसान तरीका कूपन मॉडल पर बैकबोन की url विधि को ओवरराइड करना है, जिसे आपके द्वारा परिभाषित किया गया है। उदाहरण के लिए आप कर सकते हैं:

Affiliates.Coupon = Backbone.Model.extend({ 
    urlRoot : "server/somecontroller/", 
    url : function(){ 
    var url = this.urlRoot + this.id; 
    if(this.get("type")){ 
     url = url + "/?type=" + this.get("type"); 
    } 
    return url; 
    } 
}); 

यह समाधान लागू करने के लिए आसान है, लेकिन एक खामी है: उत्पन्न यूआरएल हर क्रिया कि सर्वर (लाने, बचाने के लिए, ..) समन्वयित हो जाता है के लिए इस्तेमाल किया जाएगा।

यदि आप जो क्रिया कर रहे हैं उसके आधार पर आपको यूआरएल की पीढ़ी पर बेहतर नियंत्रण करने की आवश्यकता है तो आपको अपने मॉडल के लिए बैकबोन की Sync विधि ओवरराइड करने की आवश्यकता होगी।

0

यह कुछ कस्टम डेटा का उपयोग करने के लिए मॉडल में fetch विधि को ओवरराइड करके किया जा सकता है। CoffeeScript का उपयोग करते हुए यह ऐसा दिखाई दे सकता:

class AffiliatesApp.Coupon extends Backbone.Model 
    fetch: -> 
    super(data: { type: @get('type') }) 

ध्यान दें कि यह उदाहरण coupon.fetch() के लिए पारित कोई गुण पर ध्यान नहीं देगा, लेकिन यह आसानी से किसी भी ओवरराइड तर्क के लिए समायोजित किया जा सकता।

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

  • कोई संबंधित समस्या नहीं^_^