2012-08-01 20 views
6

में ईवेंट ऑब्जेक्ट में बाध्य कार्यों के लिए तर्क कैसे पारित करें मुझे बैकबोन में ईवेंट ऑब्जेक्ट में उपयोग किए गए कार्यों के लिए तर्क होना चाहिए।backbone.js

var DocumentRow = Backbone.View.extend({ 

    tagName: "li", 

    className: "document-row", 

    events: { 
     "click .icon": "open", 
     "click .button.edit": "openEditDialog", 
     "click .button.delete": "destroy" 
    }, 

    render: function() { 
     // do something 
    } 
}); 

अब खुला होना की परिभाषा करते हैं:

function open(id) { 
    if (id) { 
     // do something 
    } else { 
     // do something else 
    } 
} 

मैं एक समारोह से खुला कॉल करेंगे और जब मैं इसे कहते आईडी पारित करेंगे। तो इस पर आधारित है कि मैं आईडी पास करता हूं या नहीं, मुझे अलग-अलग चीजें करने की ज़रूरत है। मैं बैकबोन में यह कैसे करूं? वर्तमान में, आईडी को क्लिक के माध्यम से बुलाया जाने पर मुझे उम्मीद है कि यह अपरिभाषित हो। लेकिन एक घटना वस्तु पारित हो जाती है।

यह क्यों खुश होता है और मैं एक तर्क कैसे पारित कर सकता हूं?

+0

यह संबंधित है - http://stackoverflow.com/questions/5680807/backbone-js-events-knowing-what-was-clicked –

उत्तर

5

एक और तरीका है इस दृष्टिकोण एक पूरी तरह से अलग विधि है कि क्लिक संभालती उपयोग करने के लिए है, और कॉल "खुला" तो यह अन्य प्रक्रिया द्वारा कहा जा सकता है। जैसा कि किसी अन्य व्यक्ति ने उल्लेख किया है, घटनाओं में निर्दिष्ट विधियों हैश jquery प्रतिनिधि रैपर हैं, इसलिए आप जो भी प्राप्त करेंगे, वह पैरामेट के संबंध में आप इतना कुछ नहीं कर सकते हैं कि प्रतिनिधि क्या प्रदान करता है। तो उस स्थिति में, एक और तरीका है कि वास्तविक आइकन क्लिक कि खुले लागू करेगा करता है बनाने के लिए:

events: { 
    "click .icon": "open", 
    "click .button.edit": "openEditDialog", 
    "click .button.delete": "destroy" 
}, 
/** 
* Specifically handles the click and invokes open 
*/ 
handleIconClick : function(event) { 
    // ...process 'event' and create params here... 
    this.open(params); 
}, 
/** 
* This can be called remotely 
*/ 
open : function(id) { 
    if (id) { 
     // do something 
    } else { 
     // do something else 
    } 
} 
+0

क्या प्रक्रिया यहाँ है – shiva

2

आप आईडी चर के प्रकार जानते हैं कि आप अगर सच जाँच करने के लिए जावास्क्रिप्ट typeof() उपयोग कर सकते हैं या आप देख सकते हैं कि आईडी _.isObject के साथ वस्तु UnderscoreJS

से है
4

आप यहाँ देख सकते हैं: http://backbonejs.org/docs/backbone.html#section-156

सबसे महत्वपूर्ण वाक्य है:

this.$el.delegate(selector, eventName, method); 

क्योंकि रीढ़ की घटनाओं jQuery के प्रतिनिधि (http://api.jquery.com/delegate/) है, इसलिए पैरामीटर पारित हो जाता है तो बस jQuery के प्रतिनिधि डिफ़ॉल्ट पैरामीटर क़दम है एसईडी।

आप इस तरह अपना कोड अपडेट कर सकते हैं:

...... 

open : function(event) { 
    //get id from event 
    var id = event.xxx ;//pseudo code 
    if (id) { 
     this.openid(id); 
    } else { 
     // do something else 
    } 
}, 
//your another function direct call openid 
openid: function(id){ 
    // do something 
} 
...... 
0

मुझे लगता है कि ब्रेंडन या fejustin के उत्तर सर्वोत्तम हैं (वास्तव में मैं उनके लिए मतदान किया)। लेकिन यदि आप वास्तव में केवल एक कार्य करने के लिए प्रतिबद्ध हैं, तो आप दूसरे पैरामीटर को id बना सकते हैं और पहले को अनदेखा कर सकते हैं।

open : function(evt, id){ 
    if(id){ 
    //whatever 
    } else { 

    } 
}, 

someOtherMethod : function(){ 
    this.open(null, id); 
}