2011-06-07 13 views
34

चलो कहते हैं कि मेरे पास करते हैं:कैसे एक संग्रह के यूआरएल सेट करने के लिए

var Book = Backbone.Model.extend(); 

var Collection = Backbone.Collection.extend({ 
    model: Book, 
    url: '/books', 
    initialize: function(){ 
    this.fetch(); 
    }) 
}) 

मैं जब एक नया संग्रह instantiating कैसे बदल सकता हूँ Collection के url?

var AdventureBooks = new Books({ url: '/books/adventure' }) काम नहीं करता है

var AdventureBooks = new Books({ category: 'adventure' }) 

और संग्रह परिभाषा:

url : '/books/' + this.category या तो काम नहीं करता।

धन्यवाद।

उत्तर

28
var Book = Backbone.Model.extend({ 
    "url": function() { 
    return '/books/' + this.get("category"); 
    } 
}); 
+0

यह मेरे लिए काम करने के लिए प्रतीत नहीं होता है (बैकबोन 0.5। 3)। – harm

+1

हमारे उद्धरण "url" – Harry

+13

पर भी लेते हैं, यह एक मॉडल से प्राप्त संपत्ति है। आपके संग्रह के बारे में यूआरएल का उपयोग करने के बारे में क्या? वह ओपी का सवाल था। –

39

निम्नलिखित काम करना चाहिए:

var AdventureBooks = new Books(); 
AdventureBooks.url = '/books/adventure'; 
13

किसी कारण मापदंडों संग्रह निर्माता (उदाहरण के लिए "Url") के लिए पारित वस्तु पर सेट नहीं हैं। संग्रह केवल उनमें से कुछ (मॉडल और तुलनित्र) का उपयोग करता है।

आप निर्माता के माध्यम से यूआरएल आप इनिशियलाइज़ विधि उस वस्तु को प्रतियां आवश्यक मानकों को बनाने की आवश्यकता पास करना चाहते हैं:

var Book = Backbone.Model.extend({ 
    initialize: function(props) { 
     this.url = props.url; 
    } 
} 
var book = new Book({url: "/books/all"}); 
+5

प्रारंभिक विधि वास्तव में है: [दस्तावेज़ीकरण] (http://backbonejs.org/#Collection-constructor) के अनुसार प्रारंभ करें ([मॉडल], [विकल्प]) –

+1

@DanielPatz: आप संग्रह के बारे में सोच रहे हैं। मॉडल प्रारंभिक ([विशेषताएँ], [विकल्प]) के साथ अंतर्निहित है। – geon

8
डैनियल Pätz pointed out तरह

, समस्या है आप कैसे instantiating रहे हैं में निहित है संग्रह। मैंने अभी थोड़ा सा संघर्ष किया है, इसलिए मैंने सोचा कि मैं इसे अपडेट कर दूंगा, भले ही सवाल कुछ हद तक पुराना हो।

पहला तर्क मॉडल के सरणी होने की उम्मीद है, विकल्पों के बाद आने वाले विकल्पों के साथ। यह काम करना चाहिए:

var AdventureBooks = new Books([], { url: '/books/adventure' }) 

आप एक गतिशील यूआरएल चाहते हैं, तो Raynos 'जवाब जाने का रास्ता हो सकता है।

+0

यह मेरा मामला था, मैं पहले पैरामीटर 'ऑब्जेक्ट' ({url: '/ books/adventure'} में ऑब्जेक्ट को पास करने के लिए यूआरएल सेट करने का प्रयास कर रहा था) 'धन्यवाद @Ruy Diaz –

+2

बैकबोन 1.1 के साथ काम नहीं कर रहा है – Bjorn

+3

पुष्टि कर सकते हैं, यह अब काम नहीं करता है। – JayD3e

1

मुझे पता है कि यह एक देर से उत्तर है, लेकिन मेरे पास एक समान था हालांकि थोड़ा और जटिल स्थिति, और चयनित उत्तर वास्तव में मेरी मदद नहीं करता था।

मेरे पास एक शर्त संग्रह है, और प्रत्येक प्रयोग मॉडल में कई स्थितियां हैं, और मुझे अपने यूआरएल/एपीआई/प्रयोग/प्रयोगशाला/शर्तों के लिए आवश्यक है, लेकिन मुझे नहीं पता था कि खाली शर्तों से प्रयोग आईडी को कैसे पहुंचाया जाए संग्रह।

मेरी स्थितियां संग्रह यूआरएल समारोह में, मैं एक console.log (this.toJSON()) किया था और पता चला कि रीढ़ खाली संग्रह जो कुछ के साथ जिम्मेदार बताते हैं आप इसे में पारित निर्माण समय आ गया है में एक भी डमी मॉडल सम्मिलित करता है।

तो:

var Conditions = new ConditionsCollection({ 
    experimentId: 1 
}); 

मैं किसी भी तरह से संदेह है कि यह एक सबसे अच्छा अभ्यास पर विचार किया जाएगा, उम्मीद है कि किसी और एक बेहतर समाधान के साथ जवाब देंगे, लेकिन यहाँ मैं अपने संग्रह में परिभाषित किया गया है:

var ConditionsCollection = Backbone.Collection.extend({ 
    model: Condition, 
    url: function(){ 
    var experimentId = this.at(0).get("experimentId"); 
    return "/api/experiments/" + experimentId + "/conditions"; 
    } 
}); 
2

मेरे लिए सबसे अच्छा समाधान प्रारंभिक विधि है, इस उदाहरण को देखें:

Entities.MyCollection = Backbone.Collection.extend({ 
    model: Entities.MyModel, 
    initialize: function(models,options) { 
     this.url = (options||{}).url || "defaultURL"; 
    }, 
} 

उपयोग यह इस प्रकार है:

var items = new Entities.MyCollection();      //default URL 
var items = new Entities.MyCollection([],{url:'newURL'}); //changed URL 
3

आप अपने संग्रह के लिए गतिशील यूआरएल करना चाहते हैं, कोशिश यह (रीढ़ की हड्डी 1.1.2 के साथ परीक्षण):

अपने रीढ़ संग्रह का एक उदाहरण बना सकते हैं और गतिशील url पैरामीटर पारित एक विकल्प के रूप (जैसा कि पहले एक मॉडल की एक वैकल्पिक सरणी है विकल्प की जरूरत आपत्ति दूसरा तर्क होने के लिए): अपने संग्रह के अंदर

var tweetsCollection = new TweetsCollection(null, { userId: 'u123' }); 

फिर, से मूल्य का उपयोग करता है एक गतिशील यूआरएल समारोह बनाने विकल्प ऑब्जेक्ट:

var TweetsCollection = Backbone.Collection.extend({ 
    url: function() { 
     return '/api/tweets/' + this.options.userId; 
    }, 
    model: TweetModel 
}); 
0

मेरे लिए यह काम (रीढ़ की हड्डी 1.2.1 के साथ परीक्षण):

var serverData = Backbone.Collection.extend({ 
url: function() { 
    return '//localhost/rest/' + this.dbname; 
}, 
constructor: function(a) { 
    if(a.dbname){ 
     this.dbname = a.dbname; 
    } 
    Backbone.Collection.apply(this, arguments); 
} 
}); 

इसका इस्तेमाल इस प्रकार है:

var users = new serverData({dbname : 'users'}); 
संबंधित मुद्दे