सवाल Backbone.js संग्रह विकल्प


मैंने Backbone.js का उपयोग कर एक मॉडल / दृश्य / संग्रह लिखा है। मेरा संग्रह रिमोट सर्वर से मॉडल लोड करने के लिए fetch विधि का उपयोग करता है। इस संग्रह के लिए आवश्यक यूआरएल को एक आईडी की आवश्यकता है: संदेश / {आईडी}। लेकिन मुझे संग्रह में विकल्प पास करने का कोई साफ तरीका नहीं मिला है।

Backbone.js दृश्य इसे निर्माण पर पास करके विकल्पों को स्वीकार करता है: देखें ([विकल्प]), लेकिन संग्रह निर्माण पर मॉडल की एक सूची की अपेक्षा करता है: संग्रह ([मॉडल])।

इस संग्रह में पैरामीटर / विकल्पों को पारित करने का "सबसे साफ" तरीका क्या है?

संक्षिप्त कोड:

var Messages = Backbone.Collection.extend({
 model: Message,
   url: 'http://url/messages/' + id
});

44
2017-12-11 13:49


मूल


शायद सापेक्ष यूआरएल का उपयोग करना भी एक बेहतर विचार है? - malletjo


जवाब:


@ पॉल का जवाब अच्छा है, लेकिन यह भी ध्यान देने योग्य है कि url विशेषता एक समारोह हो सकता है। मेरी राय में (और यह सिर्फ राय है, क्योंकि अंतिम परिणाम वही है), कोड थोड़ा और सुगम है, अगर अधिक वर्बोज़, यदि आप आईडी को सेट करते हैं initialize और इसे एक समारोह में संदर्भित करें:

var Messages = Backbone.Collection.extend({
  initialize: function(models, options) {
    this.id = options.id;
  },
  url: function() {
    return '/messages/' + this.id;
  },
  model: Message,
});

var collection = new Messages([], { id: 2 });
collection.fetch();

बस सुनिश्चित करने के लिए, हालांकि - आप भ्रमित नहीं कर रहे हैं id मॉडल के साथ यहाँ id, क्या आप? @ पॉल का जवाब, और ऊपर मेरा कोड, मान लें कि आपके पास एकाधिक हैं Messages संग्रह, प्रत्येक अपनी आईडी के साथ। यदि एपीआई पथ /messages/<id> वास्तव में एक को संदर्भित करता है संदेश, संदेशों का एक सेट नहीं है, तो आपको केवल सेट करने की आवश्यकता है url सेवा मेरे /messages/ संग्रह में, और बैकबोन स्वचालित रूप से उपयोग करेंगे /messages/<id> प्रत्येक मॉडल के लिए।


107
2017-12-11 16:51



धन्यवाद Nick इस तरह के एक सरल और स्पष्ट उदाहरण के लिए। काश मैं तुम्हारा जवाब देख सकता था, मैं एक दिन बचा लेता .... धन्यवाद। - Shubh
हां, यह मेरे लिए अपरिभाषित परिणाम है। नीचे जवाब काम करता है। - zeros-and-ones


जिस तरह से आपके पास यूआरएल संपत्ति घोषित की गई है, वैल्यू एक बार निर्धारित की जाएगी जब ब्राउज़र प्रारंभ में जावास्क्रिप्ट फ़ाइल लोड करता है, और 'आईडी' अपरिभाषित होगा।

बैकबोन। चयन अपने कन्स्ट्रक्टर में दूसरे तर्क के रूप में विकल्पों को स्वीकार करता है, इसलिए आप आईडी मान को एक विकल्प के रूप में पास कर सकते हैं, और फिर संग्रह के प्रारंभिक कार्य के भीतर यूआरएल मान सेट कर सकते हैं।

यहां एक उदाहरण दिया गया है

var Messages = Backbone.Collection.extend({
  initialize: function(models, options) {
    this.url = 'http://url/messages/' + options.id;
  },
  model: Message,
});

var collection = new Messages([], { id: 2 });
collection.fetch();

23
2017-12-11 14:01