2012-01-25 12 views
14

क्या है "विकल्पों" Backbone.js में कि मैं सभी सरकारी source code और भी यहाँ नमूना कोड के साथ Thomas Davis द्वारा एक ट्यूटोरियल ब्लॉग में इस्तेमाल किया देखें:Backbone.js में "विकल्प" क्या है?

Friends = Backbone.Collection.extend({ 
    initialize: function (models, options) { 
        this.bind("add", options.view.addFriendLi); 
       } 
}); 

मैं किसी भी अन्य ट्यूटोरियल नहीं दिख रहा है इसका उपयोग कर, और यहां तक ​​कि डॉक्टर का उल्लेख भी। यह करता है, लेकिन एक संदर्भ में प्रारूप ([विकल्प]), हार्ड-कोडेड "विकल्प" में नहीं: options.view.addFriendLi

उत्तर

16

options, पारंपरिक रूप से, कुंजी/मूल्य जोड़े का एक जावास्क्रिप्ट ऑब्जेक्ट है जो डेटा/संदर्भ/एक विधि कॉल के लिए तर्क/विन्यास। आदेशित तर्कों के विपरीत, नामित तर्कों की तरह सोचें।

उदाहरण के लिए:

var makePerson = function(name, options) { 
    var person = {}; 
    person.name = name; 
    person.age = options.age; 
    return person; 
}; 

var me = makePerson('Alex', {age:30}); // In 3 days... scary :(

कैसे समारोह बुलाया जा रहा है इस वस्तु का उपयोग करता है, कि समारोह पर निर्भर है।

Collection.initialize() लिए रीढ़ की हड्डी के लिए दस्तावेज़ सूची पर आपत्ति क्या विकल्प पर चाबी इस्तेमाल किया या उम्मीद है, जो दुर्भाग्यपूर्ण है कर रहे हैं नहीं लगता है। तो स्रोत को देखे बिना, बताने का कोई तरीका नहीं है। लेकिन आपका उदाहरण view कुंजी इंगित करने के लिए प्रतीत होता है। तो अगर आप इसे इस तरह कह सकते हैं:

var friendsCollection = new Friends(userModels, {view: someBackboneView}); 

यह केवल एक सम्मेलन में कई पुस्तकालयों का प्रयोग होता हैं, और इसके बारे में कुछ खास नहीं है। लेकिन आमतौर पर फ़ंक्शन कॉल में पारित ऑब्जेक्ट में कई कुंजियां एक मल्टीसिटन से बेहतर होती हैं जिन्हें आप कई तर्कों के साथ कॉल करते हैं, क्योंकि प्रत्येक मान में एक लेबल होता है जो यह स्पष्ट करता है कि प्रत्येक मान क्या है।


, थोड़ा आगे देख रहे हैं अब यहाँ: http://documentcloud.github.com/backbone/docs/backbone.html#section-53

ऐसा लगता है कि Collection.initialize() केवल यह के विकल्प में एक भी कुंजी स्वीकार करता है: comparator। यहाँ आप संग्रह में मॉडल सॉर्ट करने के लिए प्रयोग किया जाता है एक समारोह को परिभाषित कर सकते हैं: http://documentcloud.github.com/backbone/#Collection-comparator

कार्य है कि अपने उदाहरण में, आप कहेंगे कि इस तरह:

var friendsCollection = new Friends(userModels, { 
    view: someBackboneView, 
    comparator: function(friend) { 
    return friend.get('age'); 
    } 
}); 
+1

मुझे आपका जवाब पसंद है। मैंने निश्चित रूप से कुछ ऐसा सीखा है, इसलिए +1, लेकिन मैं इसे Backbone.js के संदर्भ में पूछ रहा हूं।यह [विकल्प] नहीं है कि मैं पूछ रहा हूं लेकिन बैकबोन.जेएस के साथ एक हार्ड-कोडेड "विकल्प"। हालांकि, एक अलग संदर्भ में महान उत्तर :) –

+0

इस विधि में विशेष रूप से विकल्पों को कैसे प्रबंधित करता है, इस बारे में अधिक जानकारी के साथ संपादित किया गया है। –

+0

वैसे यह समझ में आता है। समय के लिए धन्यवाद :) –

1

ठीक है, आप द्वारा ट्यूटोरियल ब्लॉग देख सकते हैं

.... 
AppView=Backbone.View.extend({ 
    el:$("body"), 
    initialize:function(){ 
     this.friends=new Friends(null, {view:this}); 
     //Create a friends collection when the view is initialized, 
     //Pass it a reference to this view to create a connection between the two 
    } 
.... 

कुंजी this.friends=new Friends(null, {view:this});

है: नमूना कोड के साथ थॉमस डेविस, Backbone.View.extend आपके प्रश्न का उत्तर होगा

ऊपर कोड initialize:function(models, options)

तो आप को पता कर सकते हैं, "विकल्प" == से "{दृश्य: इस}"

यह एक नए दोस्त बनाता है और एक पैरामीटर में गुजरता ({दृश्य: इस}) , तो यह उपर्युक्त समारोह में खुद को पास करता है।

कोड options.view.addFriendLi को मिलाएं, हम जान सकते हैं कि यह विधि .addFriendLi पर क्यों कॉल कर सकती है।